{
  "_format": "hh-sol-artifact-1",
  "contractName": "PolicyPool",
  "sourceName": "contracts/PolicyPool.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IAccessManager",
          "name": "access_",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Metadata",
          "name": "currency_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ComponentAlreadyInThePool",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "enum PolicyPool.ComponentKind",
          "name": "kind",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ComponentInUseCannotRemove",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ComponentMustBeActiveOrDeprecated",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ComponentNotDeprecated",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ComponentNotFound",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ComponentNotFoundOrNotActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ComponentNotLinkedToThisPool",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPoolComponent",
          "name": "component",
          "type": "address"
        },
        {
          "internalType": "enum PolicyPool.ComponentKind",
          "name": "expectedKind",
          "type": "uint8"
        }
      ],
      "name": "ComponentNotTheRightKind",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "response",
          "type": "bytes4"
        }
      ],
      "name": "InvalidNotificationResponse",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoEmptyName",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoEmptySymbol",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoZeroAccess",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoZeroCurrency",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoZeroTreasury",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyRiskModuleAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UpgradeCannotChangeAccess",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "enum IAccessManager.GovernanceActions",
          "name": "action",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "value",
          "type": "address"
        }
      ],
      "name": "ComponentChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IPolicyPoolComponent",
          "name": "component",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum PolicyPool.ComponentKind",
          "name": "kind",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "enum PolicyPool.ComponentStatus",
          "name": "newStatus",
          "type": "uint8"
        }
      ],
      "name": "ComponentStatusChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IPolicyHolder",
          "name": "holder",
          "type": "address"
        }
      ],
      "name": "ExpirationNotificationFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IRiskModule",
          "name": "riskModule",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "indexed": false,
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        }
      ],
      "name": "NewPolicy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IRiskModule",
          "name": "riskModule",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "oldPolicyId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newPolicyId",
          "type": "uint256"
        }
      ],
      "name": "PolicyReplaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IRiskModule",
          "name": "riskModule",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "PolicyResolved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GUARDIAN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEVEL1_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEVEL2_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "access",
      "outputs": [
        {
          "internalType": "contract IAccessManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPoolComponent",
          "name": "component",
          "type": "address"
        },
        {
          "internalType": "enum PolicyPool.ComponentKind",
          "name": "kind",
          "type": "uint8"
        }
      ],
      "name": "addComponent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPoolComponent",
          "name": "component",
          "type": "address"
        },
        {
          "internalType": "enum PolicyPool.ComponentStatus",
          "name": "newStatus",
          "type": "uint8"
        }
      ],
      "name": "changeComponentStatus",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "eToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData[]",
          "name": "policies",
          "type": "tuple[]"
        }
      ],
      "name": "expirePolicies",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        }
      ],
      "name": "expirePolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPoolComponent",
          "name": "component",
          "type": "address"
        }
      ],
      "name": "getComponentStatus",
      "outputs": [
        {
          "internalType": "enum PolicyPool.ComponentStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "name": "getPolicyHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "treasury_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IRiskModule",
          "name": "rm",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "internalId",
          "type": "uint96"
        }
      ],
      "name": "makePolicyId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "policyHolder",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "internalId",
          "type": "uint96"
        }
      ],
      "name": "newPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IPolicyPoolComponent",
          "name": "component",
          "type": "address"
        }
      ],
      "name": "removeComponent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "oldPolicy",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "newPolicy_",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "internalId",
          "type": "uint96"
        }
      ],
      "name": "replacePolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "resolvePolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "customerWon",
          "type": "bool"
        }
      ],
      "name": "resolvePolicyFullPayout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "nftBaseURI_",
          "type": "string"
        }
      ],
      "name": "setBaseURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "treasury_",
          "type": "address"
        }
      ],
      "name": "setTreasury",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "treasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "eToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60e060405230608052348015610013575f5ffd5b50604051615c46380380615c4683398101604081905261003291610172565b6001600160a01b0382166100595760405163a9f283c960e01b815260040160405180910390fd5b6001600160a01b0381166100805760405163559a03cd60e01b815260040160405180910390fd5b61008861009f565b6001600160a01b0391821660a0521660c0526101aa565b5f54610100900460ff161561010a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610159575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461016f575f5ffd5b50565b5f5f60408385031215610183575f5ffd5b825161018e8161015b565b602084015190925061019f8161015b565b809150509250929050565b60805160a05160c0516159bc61028a5f395f8181610749015281816110c00152818161117401528181611228015281816114d001528181611542015281816115a301528181611dea01528181611e9301528181611f3a01528181611f7901526120a501525f81816105db015281816113ed0152818161182b0152818161191d01528181611a3301528181611acf015281816121b50152818161273701528181612d8c01528181612fcf015281816134fc015261358b01525f8181610bd001528181610c100152818161168e015281816116ce015261175b01526159bc5ff3fe608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614c32565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614c7b565b3480156102b8575f5ffd5b506102cc6102c7366004614d70565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614de8565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614dff565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614e29565b610b95565b34801561034e575f5ffd5b506103635f5160206159675f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614e67565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614eb2565b3480156103c1575f5ffd5b506102cc6103d0366004614e67565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004614fc4565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614e29565b611482565b348015610432575f5ffd5b506102cc610441366004614dff565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc61048736600461501d565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461506a565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f03660046150a8565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614de8565b611bd5565b34801561053d575f5ffd5b5061036361054c3660046150df565b611c34565b34801561055c575f5ffd5b506102cc61056b366004615145565b61211a565b34801561057b575f5ffd5b506102cc61058a3660046150a8565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614e67565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614e67565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614de8565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615160565b612d53565b348015610655575f5ffd5b50610277610664366004614de8565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461518b565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d936600461520a565b612ee4565b3480156106e9575f5ffd5b506102cc6106f8366004615236565b612eef565b348015610708575f5ffd5b5061036361071736600461529e565b612f21565b348015610727575f5ffd5b506102a0610736366004614de8565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b506102776107873660046152d1565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614e67565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614dff565b613058565b3480156107fe575f5ffd5b506103635f5160206159205f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046152fd565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c9061532a565b80601f01602080910402602001604051908101604052809291908181526020018280546108989061532a565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061535c565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906153f5565b610c85816134d6565b604080515f80825260208201909252610ca09183919061363a565b50565b5f610cac6137a4565b610cb5856137ea565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190615441565b9050610d5d816003613850565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661388b565b86515f90815261012f6020526040812091909155875161100a90611bd5565b905061102881885f015160405180602001604052805f815250613909565b87515f90815261012f602052604080822091909155516355c1da5f60e11b81526001600160a01b0383169063ab83b4be90611069908b908b9060040161551c565b5f604051808303815f87803b158015611080575f5ffd5b505af1158015611092573d5f5f3e3d5ffd5b505050505f8860c001518860c001516110ab919061554d565b905080156110e8576110e86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001688858461393b565b8861014001518861014001516110fe919061554d565b9050801561119c5761119c87846001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a9190615441565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691908461393b565b8861012001518861012001516111b2919061554d565b905080156111fa576111fa87846001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b8860e001518860e0015161120e919061554d565b905080156112535761012d54611253906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a91168461393b565b886101000151886101000151611269919061554d565b90505f811180156112eb5750836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d59190615441565b6001600160a01b0316876001600160a01b031614155b156113305761133087856001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b836001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b896040516113699190615560565b60405180910390a2875189516040516001600160a01b038716907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4885188516113b69190613995565b50508551925050505b949350505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611460575f5ffd5b505afa158015611472573d5f5f3e3d5ffd5b5050505061147e613a90565b5050565b610b9083838360405180602001604052805f815250612eef565b6114a46137a4565b6114af826001613850565b6040516370a0823160e01b81526001600160a01b0383811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611517573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153b919061556f565b90506115727f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633858561393b565b6001600160a01b0383166347e7ef24336040516370a0823160e01b81526001600160a01b03878116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156115ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e919061556f565b611618919061554d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a56919061556f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116cc5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117145f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b03161461173a5760405162461bcd60e51b8152600401610983906153f5565b611743826134d6565b61147e8282600161363a565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ee5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610983565b505f5160206159005f395f51905f5290565b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611895575f5ffd5b505afa1580156118a7573d5f5f3e3d5ffd5b505050508161013090816118bb91906155d1565b506040513381526004907fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f906020015b60405180910390a25050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611990575f5ffd5b505afa1580156119a2573d5f5f3e3d5ffd5b5050506001600160a01b0385165f90815261012e602052604081209150815460ff1660038111156119d5576119d5614e82565b036119f357604051637d91856360e01b815260040160405180910390fd5b6001846003811115611a0757611a07614e82565b1480611a2457506002846003811115611a2257611a22614e82565b145b15611ac5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159205f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611aaa575f5ffd5b505afa158015611abc573d5f5f3e3d5ffd5b50505050611b5d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159675f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611b46575f5ffd5b505afa158015611b58573d5f5f3e3d5ffd5b505050505b80548490829060ff19166001836003811115611b7b57611b7b614e82565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91611bc691610100900460ff1690889061568c565b60405180910390a25050505050565b5f81815260fd60205260408120546001600160a01b0316806108575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f611c3d6137a4565b6101608501516001600160a01b0381163314611c6c57604051634ace04f960e01b815260040160405180910390fd5b611c77816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd89190615441565b9050611ce5816003613850565b611cef8285612f21565b8088525f90815261012f602052604090205415611d465760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b611d4f8761388b565b87515f90815261012f602090815260408083209390935589518351918201909352908152611d7e918791613909565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611daa908a90600401615560565b5f604051808303815f87803b158015611dc1575f5ffd5b505af1158015611dd3573d5f5f3e3d5ffd5b50505060c0880151611e1491506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908890849061393b565b61014087015115611ebb57611ebb86826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e839190615441565b6101408a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012087015115611f6257611f6286826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2a9190615441565b6101208a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012d5460e0880151611fa7916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a92919091169061393b565b5f87610100015111801561202c5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120169190615441565b6001600160a01b0316866001600160a01b031614155b156120cd576120cd86836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120959190615441565b6101008a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516121069190615560565b60405180910390a250509351949350505050565b6121226137a4565b426121356101c083016101a084016156b2565b64ffffffffff1611156121835760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b610ca0612195368390038301836156cb565b5f6001613ae2565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b15801561221f575f5ffd5b505afa158015612231573d5f5f3e3d5ffd5b5050506001600160a01b0384165f90815261012e602052604081209150815460ff16600381111561226457612264614e82565b146122825760405163cf9a96f360e01b815260040160405180910390fd5b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec9190615441565b6001600160a01b03161461231357604051630fdee24360e11b815260040160405180910390fd5b600183600381111561232757612327614e82565b1480156123a357506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061236290639077062160e01b906004016156e6565b602060405180830381865afa15801561237d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a191906156fb565b155b80612439575060038360038111156123bd576123bd614e82565b14801561243957506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a7906123f890630e72532960e11b906004016156e6565b602060405180830381865afa158015612413573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243791906156fb565b155b806124cf5750600283600381111561245357612453614e82565b1480156124cf57506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061248e9063da40804f60e01b906004016156e6565b602060405180830381865afa1580156124a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cd91906156fb565b155b156124f157838360405163502c9a5f60e01b8152600401610983929190615716565b8054600160ff198216811783558491839161ffff199091161761010083600381111561251f5761251f614e82565b0217905550600383600381111561253857612538614e82565b036126d5575f8490505f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a29190615441565b90506001600160a01b0381161561260a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156125f3575f5ffd5b505af1158015612605573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612646573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266a9190615441565b90506001600160a01b038116156126d2576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156126bb575f5ffd5b505af11580156126cd573d5f5f3e3d5ffd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef84600160405161271192919061568c565b60405180910390a250505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b1580156127a1575f5ffd5b505afa1580156127b3573d5f5f3e3d5ffd5b505050506001600160a01b0382165f90815261012e602052604090206002815460ff1660038111156127e7576127e7614e82565b1461280557604051635c92b23960e11b815260040160405180910390fd5b60018154610100900460ff16600381111561282257612822614e82565b0361291d57826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612863573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612887919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fd919061556f565b604051631d0ec0ab60e01b815260040161098392919061572f565b612c5d565b60028154610100900460ff16600381111561293a5761293a614e82565b036129f157826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b60038154610100900460ff166003811115612a0e57612a0e614e82565b03612c5d575f839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a77919061556f565b15612ac957815f0160019054906101000a900460ff16816001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b5f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a9190615441565b90506001600160a01b03811615612b92576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612b7b575f5ffd5b505af1158015612b8d573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf29190615441565b90506001600160a01b03811615612c5a576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612c43575f5ffd5b505af1158015612c55573d5f5f3e3d5ffd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91612ca391610100900460ff16905f9061568c565b60405180910390a250506001600160a01b03165f90815261012e60205260409020805461ffff19169055565b5f6001600160a01b038216612d385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610983565b506001600160a01b03165f90815260fe602052604090205490565b612d5b6137a4565b61147e612d6d368490038401846156cb565b825f613ae2565b5f5160206159675f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015612df6575f5ffd5b505afa158015612e08573d5f5f3e3d5ffd5b50505050610ca0613e0b565b612e1c6137a4565b5f5b81811015610b905742838383818110612e3957612e39615746565b90506101c002016101a0016020810190612e5391906156b2565b64ffffffffff161115612ea15760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b612ecd838383818110612eb657612eb6615746565b90506101c0020180360381019061219591906156cb565b600101612e1e565b606060fc805461086c9061532a565b61147e338383613e48565b612ef933836132ea565b612f155760405162461bcd60e51b81526004016109839061535c565b610a5684848484613f16565b5f612f4d6bffffffffffffffffffffffff83166bffffffffffffffffffffffff19606086901b1661575a565b9392505050565b6060612f5f8261321f565b5f612f68613f49565b90505f815111612f865760405180602001604052805f815250612f4d565b80612f9084613f59565b604051602001612fa1929190615784565b6040516020818303038152906040529392505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015613039575f5ffd5b505afa15801561304b573d5f5f3e3d5ffd5b5050505061147e82613fe9565b5f6130616137a4565b61306c836001614072565b6001600160a01b03831663f3fef3a3336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156130c6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4d919061556f565b6130f26137a4565b61147e613104368490038401846156cb565b8261310f575f613115565b83602001355b5f613ae2565b5f6001600160e01b031982166380ac58cd60e01b148061314b57506001600160e01b03198216635b5e139f60e01b145b8061085757506301ffc9a760e01b6001600160e01b0319831614610857565b5f54610100900460ff166131905760405162461bcd60e51b815260040161098390615798565b565b5f54610100900460ff166131b85760405162461bcd60e51b815260040161098390615798565b61147e82826140d1565b5f54610100900460ff166131e85760405162461bcd60e51b815260040161098390615798565b613190614110565b5f54610100900460ff166132165760405162461bcd60e51b815260040161098390615798565b610ca081613fe9565b5f81815260fd60205260409020546001600160a01b0316610ca05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f81815260ff6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132b182611bd5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f6132f583611bd5565b9050806001600160a01b0316846001600160a01b0316148061333c57506001600160a01b038082165f908152610100602090815260408083209388168352929052205460ff165b806113bf5750836001600160a01b031661335584610a5c565b6001600160a01b031614949350505050565b826001600160a01b031661337a82611bd5565b6001600160a01b0316146133a05760405162461bcd60e51b8152600401610983906157e3565b6001600160a01b0382166134025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610983565b61340f8383836001614142565b826001600160a01b031661342282611bd5565b6001600160a01b0316146134485760405162461bcd60e51b8152600401610983906157e3565b5f81815260ff6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260fe855283862080545f190190559087168086528386208054600101905586865260fd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b15801561356f575f5ffd5b505afa158015613581573d5f5f3e3d5ffd5b505050505f8390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136139190615441565b6001600160a01b031614610a5657604051630f13081760e01b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561366d57610b908361414f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156136c7575060408051601f3d908101601f191682019092526136c49181019061556f565b60015b61372a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610983565b5f5160206159005f395f51905f5281146137985760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610983565b50610b908383836141ea565b60335460ff16156131905760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610983565b805115801590613811575080515f90815261012f602052604090205461380f8261388b565b145b610ca05760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610983565b600161385c838361420e565b600381111561386d5761386d614e82565b1461147e57604051630422f25f60e01b815260040160405180910390fd5b5f8160405160200161389d9190615560565b60408051601f1981840301815291905280516020909101209050806139045760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610983565b919050565b6139138383614280565b61391f5f848484614415565b610b905760405162461bcd60e51b815260040161098390615828565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a5690859061450f565b5f61399f83611bd5565b90506001600160a01b0381163b6139b557505050565b6139c681635ee0c7dd60e01b6145e2565b6139cf57505050565b5f6001600160a01b038216635ee0c7dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015613a37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5b919061587a565b90506001600160e01b03198116635ee0c7dd60e01b14610a5657806040516381784a5160e01b815260040161098391906156e6565b613a986145fd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613aeb836137ea565b61016083015181158015613b0857506001600160a01b0381163314155b15613b2657604051634ace04f960e01b815260040160405180910390fd5b821580613b3e575042846101a0015164ffffffffff16115b613b8a5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610983565b613b95816002614072565b8360200151831115613be25760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610983565b5f5f841190505f826001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c499190615441565b9050613c56816003614072565b85515f90815261012f60205260408120558115613ce0575f613c7a875f0151611bd5565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee790613cad9084908b908b90600401615895565b5f604051808303815f87803b158015613cc4575f5ffd5b505af1158015613cd6573d5f5f3e3d5ffd5b5050505050613d3a565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613d0c908990600401615560565b5f604051808303815f87803b158015613d23575f5ffd5b505af1158015613d35573d5f5f3e3d5ffd5b505050505b6020860151604051636a448ef160e01b815260048101919091526001600160a01b03841690636a448ef1906024015f604051808303815f87803b158015613d7f575f5ffd5b505af1158015613d91573d5f5f3e3d5ffd5b50505050855f01518661016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e87604051613dd991815260200190565b60405180910390a38415613df8578551613df39086614646565b613e03565b8551613e0390614741565b505050505050565b613e136137a4565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ac53390565b816001600160a01b0316836001600160a01b031603613ea95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610983565b6001600160a01b038381165f8181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613f21848484613367565b613f2d84848484614415565b610a565760405162461bcd60e51b815260040161098390615828565b6060610130805461086c9061532a565b60605f613f658361483b565b60010190505f8167ffffffffffffffff811115613f8457613f84614c8d565b6040519080825280601f01601f191660200182016040528015613fae576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613fb857509392505050565b6001600160a01b038116614010576040516307a2ee8b60e11b815260040160405180910390fd5b61012d80546001600160a01b0319166001600160a01b038316179055600161012d546040516001600160a01b0390911681527fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f9060200160405180910390a250565b5f61407d838361420e565b9050600181600381111561409357614093614e82565b141580156140b3575060028160038111156140b0576140b0614e82565b14155b15610b905760405163d08ef1ff60e01b815260040160405180910390fd5b5f54610100900460ff166140f75760405162461bcd60e51b815260040161098390615798565b60fb61410383826155d1565b5060fc610b9082826155d1565b5f54610100900460ff166141365760405162461bcd60e51b815260040161098390615798565b6033805460ff19169055565b61414a6137a4565b610a56565b6001600160a01b0381163b6141bc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610983565b5f5160206159005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6141f383614912565b5f825111806141ff5750805b15610b9057610a568383614951565b6001600160a01b0382165f90815261012e6020526040812082600381111561423857614238614e82565b8154610100900460ff16600381111561425357614253614e82565b1461427557838360405163502c9a5f60e01b8152600401610983929190615716565b5460ff169392505050565b6001600160a01b0382166142d65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610983565b5f81815260fd60205260409020546001600160a01b03161561433a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6143475f83836001614142565b5f81815260fd60205260409020546001600160a01b0316156143ab5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6001600160a01b0382165f81815260fe602090815260408083208054600101905584835260fd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b1561450757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906144589033908990889088906004016158c2565b6020604051808303815f875af1925050508015614492575060408051601f3d908101601f1916820190925261448f9181019061587a565b60015b6144ed573d8080156144bf576040519150601f19603f3d011682016040523d82523d5f602084013e6144c4565b606091505b5080515f036144e55760405162461bcd60e51b815260040161098390615828565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bf565b5060016113bf565b5f614563826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149769092919063ffffffff16565b905080515f148061458357508080602001905181019061458391906156fb565b610b905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610983565b5f6145ec83614984565b8015612f4d5750612f4d83836149b6565b60335460ff166131905760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610983565b5f61465083611bd5565b90506001600160a01b0381163b61466657505050565b61467781633ece0a8960e01b6145e2565b61468057505050565b5f6001600160a01b03821663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af11580156146e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061470c919061587a565b90506001600160e01b03198116636b140e9f60e11b14610a5657806040516381784a5160e01b815260040161098391906156e6565b5f61474b82611bd5565b90506001600160a01b0381163b614760575050565b61477181633ece0a8960e01b6145e2565b614779575050565b6001600160a01b03811663e8e617b7620249f0336040516001600160e01b031960e085901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f8887f1935050505080156147fc575060408051601f3d908101601f191682019092526147f99181019061587a565b60015b610b90576040516001600160a01b038216815282907f6ce8016f81523f240956bca9a698e643d09e84e7d0e931470b1016baf1027bd0906020016118eb565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106148795772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106148a5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106148c357662386f26fc10000830492506010015b6305f5e10083106148db576305f5e100830492506008015b61271083106148ef57612710830492506004015b60648310614901576064830492506002015b600a83106108575760010192915050565b61491b8161414f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060612f4d838360405180606001604052806027815260200161594060279139614a44565b60606113bf84845f85614ab8565b5f614996826301ffc9a760e01b6149b6565b801561085757506149af826001600160e01b03196149b6565b1592915050565b5f5f6301ffc9a760e01b836040516024016149d191906156e6565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f519050828015614a2e575060208210155b8015614a3957505f81115b979650505050505050565b60605f5f856001600160a01b031685604051614a6091906158f4565b5f60405180830381855af49150503d805f8114614a98576040519150601f19603f3d011682016040523d82523d5f602084013e614a9d565b606091505b5091509150614aae86838387614b80565b9695505050505050565b606082471015614b195760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610983565b5f5f866001600160a01b03168587604051614b3491906158f4565b5f6040518083038185875af1925050503d805f8114614b6e576040519150601f19603f3d011682016040523d82523d5f602084013e614b73565b606091505b5091509150614a39878383875b60608315614bee5782515f03614be7576001600160a01b0385163b614be75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610983565b50816113bf565b6113bf8383815115614c035781518083602001fd5b8060405162461bcd60e51b81526004016109839190614c7b565b6001600160e01b031981168114610ca0575f5ffd5b5f60208284031215614c42575f5ffd5b8135612f4d81614c1d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f4d6020830184614c4d565b634e487b7160e01b5f52604160045260245ffd5b6040516101c0810167ffffffffffffffff81118282101715614cc557614cc5614c8d565b60405290565b5f82601f830112614cda575f5ffd5b8135602083015f5f67ffffffffffffffff841115614cfa57614cfa614c8d565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614d2957614d29614c8d565b604052838152905080828401871015614d40575f5ffd5b838360208301375f602085830101528094505050505092915050565b6001600160a01b0381168114610ca0575f5ffd5b5f5f5f60608486031215614d82575f5ffd5b833567ffffffffffffffff811115614d98575f5ffd5b614da486828701614ccb565b935050602084013567ffffffffffffffff811115614dc0575f5ffd5b614dcc86828701614ccb565b9250506040840135614ddd81614d5c565b809150509250925092565b5f60208284031215614df8575f5ffd5b5035919050565b5f5f60408385031215614e10575f5ffd5b8235614e1b81614d5c565b946020939093013593505050565b5f5f5f60608486031215614e3b575f5ffd5b8335614e4681614d5c565b92506020840135614e5681614d5c565b929592945050506040919091013590565b5f60208284031215614e77575f5ffd5b8135612f4d81614d5c565b634e487b7160e01b5f52602160045260245ffd5b60048110610ca057634e487b7160e01b5f52602160045260245ffd5b60208101614ebf83614e96565b91905290565b803561390481614d5c565b803564ffffffffff81168114613904575f5ffd5b5f6101c08284031215614ef5575f5ffd5b614efd614ca1565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201529050614f776101608301614ec5565b610160820152614f8a6101808301614ed0565b610180820152614f9d6101a08301614ed0565b6101a082015292915050565b80356bffffffffffffffffffffffff81168114613904575f5ffd5b5f5f5f5f6103c08587031215614fd8575f5ffd5b614fe28686614ee4565b9350614ff2866101c08701614ee4565b925061038085013561500381614d5c565b91506150126103a08601614fa9565b905092959194509250565b5f5f6040838503121561502e575f5ffd5b823561503981614d5c565b9150602083013567ffffffffffffffff811115615054575f5ffd5b61506085828601614ccb565b9150509250929050565b5f6020828403121561507a575f5ffd5b813567ffffffffffffffff811115615090575f5ffd5b6113bf84828501614ccb565b60048110610ca0575f5ffd5b5f5f604083850312156150b9575f5ffd5b82356150c481614d5c565b915060208301356150d48161509c565b809150509250929050565b5f5f5f5f61022085870312156150f3575f5ffd5b6150fd8686614ee4565b93506101c085013561510e81614d5c565b92506101e085013561511f81614d5c565b91506150126102008601614fa9565b5f6101c0828403121561513f575f5ffd5b50919050565b5f6101c08284031215615156575f5ffd5b612f4d838361512e565b5f5f6101e08385031215615172575f5ffd5b61517c848461512e565b946101c0939093013593505050565b5f5f6020838503121561519c575f5ffd5b823567ffffffffffffffff8111156151b2575f5ffd5b8301601f810185136151c2575f5ffd5b803567ffffffffffffffff8111156151d8575f5ffd5b8560206101c0830284010111156151ed575f5ffd5b6020919091019590945092505050565b8015158114610ca0575f5ffd5b5f5f6040838503121561521b575f5ffd5b823561522681614d5c565b915060208301356150d4816151fd565b5f5f5f5f60808587031215615249575f5ffd5b843561525481614d5c565b9350602085013561526481614d5c565b925060408501359150606085013567ffffffffffffffff811115615286575f5ffd5b61529287828801614ccb565b91505092959194509250565b5f5f604083850312156152af575f5ffd5b82356152ba81614d5c565b91506152c860208401614fa9565b90509250929050565b5f5f604083850312156152e2575f5ffd5b82356152ed81614d5c565b915060208301356150d481614d5c565b5f5f6101e0838503121561530f575f5ffd5b615319848461512e565b91506101c08301356150d4816151fd565b600181811c9082168061533e57607f821691505b60208210810361513f57634e487b7160e01b5f52602260045260245ffd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215615451575f5ffd5b8151612f4d81614d5c565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516154e66101608401826001600160a01b03169052565b5061018081015161550161018084018264ffffffffff169052565b506101a0810151610b906101a084018264ffffffffff169052565b610380810161552b828561545c565b612f4d6101c083018461545c565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561085757610857615539565b6101c08101610857828461545c565b5f6020828403121561557f575f5ffd5b5051919050565b601f821115610b9057805f5260205f20601f840160051c810160208510156155ab5750805b601f840160051c820191505b818110156155ca575f81556001016155b7565b5050505050565b815167ffffffffffffffff8111156155eb576155eb614c8d565b6155ff816155f9845461532a565b84615586565b6020601f821160018114615631575f831561561a5750848201515b5f19600385901b1c1916600184901b1784556155ca565b5f84815260208120601f198516915b828110156156605787850151825560209485019460019092019101615640565b508482101561567d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6040810161569984614e96565b8382526156a583614e96565b8260208301529392505050565b5f602082840312156156c2575f5ffd5b612f4d82614ed0565b5f6101c082840312156156dc575f5ffd5b612f4d8383614ee4565b6001600160e01b031991909116815260200190565b5f6020828403121561570b575f5ffd5b8151612f4d816151fd565b6001600160a01b0383168152604081016156a583614e96565b6040810161573c84614e96565b9281526020015290565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561085757610857615539565b5f81518060208401855e5f93019283525090919050565b5f6113bf615792838661576d565b8461576d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6020828403121561588a575f5ffd5b8151612f4d81614c1d565b6001600160a01b038416815261020081016158b3602083018561545c565b826101e0830152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614aae90830184614c4d565b5f612f4d828461576d56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b1da5c23d2dc17f863551361c2deb4ca7a4e8ea0ebc43276c37001fa42c1758064736f6c634300081c0033",
  "deployedBytecode": "0x608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614c32565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614c7b565b3480156102b8575f5ffd5b506102cc6102c7366004614d70565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614de8565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614dff565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614e29565b610b95565b34801561034e575f5ffd5b506103635f5160206159675f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614e67565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614eb2565b3480156103c1575f5ffd5b506102cc6103d0366004614e67565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004614fc4565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614e29565b611482565b348015610432575f5ffd5b506102cc610441366004614dff565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc61048736600461501d565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461506a565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f03660046150a8565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614de8565b611bd5565b34801561053d575f5ffd5b5061036361054c3660046150df565b611c34565b34801561055c575f5ffd5b506102cc61056b366004615145565b61211a565b34801561057b575f5ffd5b506102cc61058a3660046150a8565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614e67565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614e67565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614de8565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615160565b612d53565b348015610655575f5ffd5b50610277610664366004614de8565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461518b565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d936600461520a565b612ee4565b3480156106e9575f5ffd5b506102cc6106f8366004615236565b612eef565b348015610708575f5ffd5b5061036361071736600461529e565b612f21565b348015610727575f5ffd5b506102a0610736366004614de8565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b506102776107873660046152d1565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614e67565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614dff565b613058565b3480156107fe575f5ffd5b506103635f5160206159205f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046152fd565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c9061532a565b80601f01602080910402602001604051908101604052809291908181526020018280546108989061532a565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061535c565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906153f5565b610c85816134d6565b604080515f80825260208201909252610ca09183919061363a565b50565b5f610cac6137a4565b610cb5856137ea565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190615441565b9050610d5d816003613850565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661388b565b86515f90815261012f6020526040812091909155875161100a90611bd5565b905061102881885f015160405180602001604052805f815250613909565b87515f90815261012f602052604080822091909155516355c1da5f60e11b81526001600160a01b0383169063ab83b4be90611069908b908b9060040161551c565b5f604051808303815f87803b158015611080575f5ffd5b505af1158015611092573d5f5f3e3d5ffd5b505050505f8860c001518860c001516110ab919061554d565b905080156110e8576110e86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001688858461393b565b8861014001518861014001516110fe919061554d565b9050801561119c5761119c87846001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a9190615441565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691908461393b565b8861012001518861012001516111b2919061554d565b905080156111fa576111fa87846001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b8860e001518860e0015161120e919061554d565b905080156112535761012d54611253906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a91168461393b565b886101000151886101000151611269919061554d565b90505f811180156112eb5750836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d59190615441565b6001600160a01b0316876001600160a01b031614155b156113305761133087856001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b836001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b896040516113699190615560565b60405180910390a2875189516040516001600160a01b038716907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4885188516113b69190613995565b50508551925050505b949350505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611460575f5ffd5b505afa158015611472573d5f5f3e3d5ffd5b5050505061147e613a90565b5050565b610b9083838360405180602001604052805f815250612eef565b6114a46137a4565b6114af826001613850565b6040516370a0823160e01b81526001600160a01b0383811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611517573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153b919061556f565b90506115727f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633858561393b565b6001600160a01b0383166347e7ef24336040516370a0823160e01b81526001600160a01b03878116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156115ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e919061556f565b611618919061554d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a56919061556f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116cc5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117145f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b03161461173a5760405162461bcd60e51b8152600401610983906153f5565b611743826134d6565b61147e8282600161363a565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ee5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610983565b505f5160206159005f395f51905f5290565b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611895575f5ffd5b505afa1580156118a7573d5f5f3e3d5ffd5b505050508161013090816118bb91906155d1565b506040513381526004907fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f906020015b60405180910390a25050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611990575f5ffd5b505afa1580156119a2573d5f5f3e3d5ffd5b5050506001600160a01b0385165f90815261012e602052604081209150815460ff1660038111156119d5576119d5614e82565b036119f357604051637d91856360e01b815260040160405180910390fd5b6001846003811115611a0757611a07614e82565b1480611a2457506002846003811115611a2257611a22614e82565b145b15611ac5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159205f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611aaa575f5ffd5b505afa158015611abc573d5f5f3e3d5ffd5b50505050611b5d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159675f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611b46575f5ffd5b505afa158015611b58573d5f5f3e3d5ffd5b505050505b80548490829060ff19166001836003811115611b7b57611b7b614e82565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91611bc691610100900460ff1690889061568c565b60405180910390a25050505050565b5f81815260fd60205260408120546001600160a01b0316806108575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f611c3d6137a4565b6101608501516001600160a01b0381163314611c6c57604051634ace04f960e01b815260040160405180910390fd5b611c77816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd89190615441565b9050611ce5816003613850565b611cef8285612f21565b8088525f90815261012f602052604090205415611d465760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b611d4f8761388b565b87515f90815261012f602090815260408083209390935589518351918201909352908152611d7e918791613909565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611daa908a90600401615560565b5f604051808303815f87803b158015611dc1575f5ffd5b505af1158015611dd3573d5f5f3e3d5ffd5b50505060c0880151611e1491506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908890849061393b565b61014087015115611ebb57611ebb86826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e839190615441565b6101408a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012087015115611f6257611f6286826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2a9190615441565b6101208a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012d5460e0880151611fa7916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a92919091169061393b565b5f87610100015111801561202c5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120169190615441565b6001600160a01b0316866001600160a01b031614155b156120cd576120cd86836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120959190615441565b6101008a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516121069190615560565b60405180910390a250509351949350505050565b6121226137a4565b426121356101c083016101a084016156b2565b64ffffffffff1611156121835760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b610ca0612195368390038301836156cb565b5f6001613ae2565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b15801561221f575f5ffd5b505afa158015612231573d5f5f3e3d5ffd5b5050506001600160a01b0384165f90815261012e602052604081209150815460ff16600381111561226457612264614e82565b146122825760405163cf9a96f360e01b815260040160405180910390fd5b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec9190615441565b6001600160a01b03161461231357604051630fdee24360e11b815260040160405180910390fd5b600183600381111561232757612327614e82565b1480156123a357506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061236290639077062160e01b906004016156e6565b602060405180830381865afa15801561237d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a191906156fb565b155b80612439575060038360038111156123bd576123bd614e82565b14801561243957506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a7906123f890630e72532960e11b906004016156e6565b602060405180830381865afa158015612413573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243791906156fb565b155b806124cf5750600283600381111561245357612453614e82565b1480156124cf57506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061248e9063da40804f60e01b906004016156e6565b602060405180830381865afa1580156124a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cd91906156fb565b155b156124f157838360405163502c9a5f60e01b8152600401610983929190615716565b8054600160ff198216811783558491839161ffff199091161761010083600381111561251f5761251f614e82565b0217905550600383600381111561253857612538614e82565b036126d5575f8490505f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a29190615441565b90506001600160a01b0381161561260a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156125f3575f5ffd5b505af1158015612605573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612646573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266a9190615441565b90506001600160a01b038116156126d2576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156126bb575f5ffd5b505af11580156126cd573d5f5f3e3d5ffd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef84600160405161271192919061568c565b60405180910390a250505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b1580156127a1575f5ffd5b505afa1580156127b3573d5f5f3e3d5ffd5b505050506001600160a01b0382165f90815261012e602052604090206002815460ff1660038111156127e7576127e7614e82565b1461280557604051635c92b23960e11b815260040160405180910390fd5b60018154610100900460ff16600381111561282257612822614e82565b0361291d57826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612863573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612887919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fd919061556f565b604051631d0ec0ab60e01b815260040161098392919061572f565b612c5d565b60028154610100900460ff16600381111561293a5761293a614e82565b036129f157826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b60038154610100900460ff166003811115612a0e57612a0e614e82565b03612c5d575f839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a77919061556f565b15612ac957815f0160019054906101000a900460ff16816001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b5f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a9190615441565b90506001600160a01b03811615612b92576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612b7b575f5ffd5b505af1158015612b8d573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf29190615441565b90506001600160a01b03811615612c5a576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612c43575f5ffd5b505af1158015612c55573d5f5f3e3d5ffd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91612ca391610100900460ff16905f9061568c565b60405180910390a250506001600160a01b03165f90815261012e60205260409020805461ffff19169055565b5f6001600160a01b038216612d385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610983565b506001600160a01b03165f90815260fe602052604090205490565b612d5b6137a4565b61147e612d6d368490038401846156cb565b825f613ae2565b5f5160206159675f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015612df6575f5ffd5b505afa158015612e08573d5f5f3e3d5ffd5b50505050610ca0613e0b565b612e1c6137a4565b5f5b81811015610b905742838383818110612e3957612e39615746565b90506101c002016101a0016020810190612e5391906156b2565b64ffffffffff161115612ea15760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b612ecd838383818110612eb657612eb6615746565b90506101c0020180360381019061219591906156cb565b600101612e1e565b606060fc805461086c9061532a565b61147e338383613e48565b612ef933836132ea565b612f155760405162461bcd60e51b81526004016109839061535c565b610a5684848484613f16565b5f612f4d6bffffffffffffffffffffffff83166bffffffffffffffffffffffff19606086901b1661575a565b9392505050565b6060612f5f8261321f565b5f612f68613f49565b90505f815111612f865760405180602001604052805f815250612f4d565b80612f9084613f59565b604051602001612fa1929190615784565b6040516020818303038152906040529392505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015613039575f5ffd5b505afa15801561304b573d5f5f3e3d5ffd5b5050505061147e82613fe9565b5f6130616137a4565b61306c836001614072565b6001600160a01b03831663f3fef3a3336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156130c6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4d919061556f565b6130f26137a4565b61147e613104368490038401846156cb565b8261310f575f613115565b83602001355b5f613ae2565b5f6001600160e01b031982166380ac58cd60e01b148061314b57506001600160e01b03198216635b5e139f60e01b145b8061085757506301ffc9a760e01b6001600160e01b0319831614610857565b5f54610100900460ff166131905760405162461bcd60e51b815260040161098390615798565b565b5f54610100900460ff166131b85760405162461bcd60e51b815260040161098390615798565b61147e82826140d1565b5f54610100900460ff166131e85760405162461bcd60e51b815260040161098390615798565b613190614110565b5f54610100900460ff166132165760405162461bcd60e51b815260040161098390615798565b610ca081613fe9565b5f81815260fd60205260409020546001600160a01b0316610ca05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f81815260ff6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132b182611bd5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f6132f583611bd5565b9050806001600160a01b0316846001600160a01b0316148061333c57506001600160a01b038082165f908152610100602090815260408083209388168352929052205460ff165b806113bf5750836001600160a01b031661335584610a5c565b6001600160a01b031614949350505050565b826001600160a01b031661337a82611bd5565b6001600160a01b0316146133a05760405162461bcd60e51b8152600401610983906157e3565b6001600160a01b0382166134025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610983565b61340f8383836001614142565b826001600160a01b031661342282611bd5565b6001600160a01b0316146134485760405162461bcd60e51b8152600401610983906157e3565b5f81815260ff6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260fe855283862080545f190190559087168086528386208054600101905586865260fd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b15801561356f575f5ffd5b505afa158015613581573d5f5f3e3d5ffd5b505050505f8390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136139190615441565b6001600160a01b031614610a5657604051630f13081760e01b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561366d57610b908361414f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156136c7575060408051601f3d908101601f191682019092526136c49181019061556f565b60015b61372a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610983565b5f5160206159005f395f51905f5281146137985760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610983565b50610b908383836141ea565b60335460ff16156131905760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610983565b805115801590613811575080515f90815261012f602052604090205461380f8261388b565b145b610ca05760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610983565b600161385c838361420e565b600381111561386d5761386d614e82565b1461147e57604051630422f25f60e01b815260040160405180910390fd5b5f8160405160200161389d9190615560565b60408051601f1981840301815291905280516020909101209050806139045760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610983565b919050565b6139138383614280565b61391f5f848484614415565b610b905760405162461bcd60e51b815260040161098390615828565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a5690859061450f565b5f61399f83611bd5565b90506001600160a01b0381163b6139b557505050565b6139c681635ee0c7dd60e01b6145e2565b6139cf57505050565b5f6001600160a01b038216635ee0c7dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015613a37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5b919061587a565b90506001600160e01b03198116635ee0c7dd60e01b14610a5657806040516381784a5160e01b815260040161098391906156e6565b613a986145fd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613aeb836137ea565b61016083015181158015613b0857506001600160a01b0381163314155b15613b2657604051634ace04f960e01b815260040160405180910390fd5b821580613b3e575042846101a0015164ffffffffff16115b613b8a5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610983565b613b95816002614072565b8360200151831115613be25760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610983565b5f5f841190505f826001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c499190615441565b9050613c56816003614072565b85515f90815261012f60205260408120558115613ce0575f613c7a875f0151611bd5565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee790613cad9084908b908b90600401615895565b5f604051808303815f87803b158015613cc4575f5ffd5b505af1158015613cd6573d5f5f3e3d5ffd5b5050505050613d3a565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613d0c908990600401615560565b5f604051808303815f87803b158015613d23575f5ffd5b505af1158015613d35573d5f5f3e3d5ffd5b505050505b6020860151604051636a448ef160e01b815260048101919091526001600160a01b03841690636a448ef1906024015f604051808303815f87803b158015613d7f575f5ffd5b505af1158015613d91573d5f5f3e3d5ffd5b50505050855f01518661016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e87604051613dd991815260200190565b60405180910390a38415613df8578551613df39086614646565b613e03565b8551613e0390614741565b505050505050565b613e136137a4565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ac53390565b816001600160a01b0316836001600160a01b031603613ea95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610983565b6001600160a01b038381165f8181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613f21848484613367565b613f2d84848484614415565b610a565760405162461bcd60e51b815260040161098390615828565b6060610130805461086c9061532a565b60605f613f658361483b565b60010190505f8167ffffffffffffffff811115613f8457613f84614c8d565b6040519080825280601f01601f191660200182016040528015613fae576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613fb857509392505050565b6001600160a01b038116614010576040516307a2ee8b60e11b815260040160405180910390fd5b61012d80546001600160a01b0319166001600160a01b038316179055600161012d546040516001600160a01b0390911681527fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f9060200160405180910390a250565b5f61407d838361420e565b9050600181600381111561409357614093614e82565b141580156140b3575060028160038111156140b0576140b0614e82565b14155b15610b905760405163d08ef1ff60e01b815260040160405180910390fd5b5f54610100900460ff166140f75760405162461bcd60e51b815260040161098390615798565b60fb61410383826155d1565b5060fc610b9082826155d1565b5f54610100900460ff166141365760405162461bcd60e51b815260040161098390615798565b6033805460ff19169055565b61414a6137a4565b610a56565b6001600160a01b0381163b6141bc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610983565b5f5160206159005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6141f383614912565b5f825111806141ff5750805b15610b9057610a568383614951565b6001600160a01b0382165f90815261012e6020526040812082600381111561423857614238614e82565b8154610100900460ff16600381111561425357614253614e82565b1461427557838360405163502c9a5f60e01b8152600401610983929190615716565b5460ff169392505050565b6001600160a01b0382166142d65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610983565b5f81815260fd60205260409020546001600160a01b03161561433a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6143475f83836001614142565b5f81815260fd60205260409020546001600160a01b0316156143ab5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6001600160a01b0382165f81815260fe602090815260408083208054600101905584835260fd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b1561450757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906144589033908990889088906004016158c2565b6020604051808303815f875af1925050508015614492575060408051601f3d908101601f1916820190925261448f9181019061587a565b60015b6144ed573d8080156144bf576040519150601f19603f3d011682016040523d82523d5f602084013e6144c4565b606091505b5080515f036144e55760405162461bcd60e51b815260040161098390615828565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bf565b5060016113bf565b5f614563826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149769092919063ffffffff16565b905080515f148061458357508080602001905181019061458391906156fb565b610b905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610983565b5f6145ec83614984565b8015612f4d5750612f4d83836149b6565b60335460ff166131905760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610983565b5f61465083611bd5565b90506001600160a01b0381163b61466657505050565b61467781633ece0a8960e01b6145e2565b61468057505050565b5f6001600160a01b03821663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af11580156146e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061470c919061587a565b90506001600160e01b03198116636b140e9f60e11b14610a5657806040516381784a5160e01b815260040161098391906156e6565b5f61474b82611bd5565b90506001600160a01b0381163b614760575050565b61477181633ece0a8960e01b6145e2565b614779575050565b6001600160a01b03811663e8e617b7620249f0336040516001600160e01b031960e085901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f8887f1935050505080156147fc575060408051601f3d908101601f191682019092526147f99181019061587a565b60015b610b90576040516001600160a01b038216815282907f6ce8016f81523f240956bca9a698e643d09e84e7d0e931470b1016baf1027bd0906020016118eb565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106148795772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106148a5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106148c357662386f26fc10000830492506010015b6305f5e10083106148db576305f5e100830492506008015b61271083106148ef57612710830492506004015b60648310614901576064830492506002015b600a83106108575760010192915050565b61491b8161414f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060612f4d838360405180606001604052806027815260200161594060279139614a44565b60606113bf84845f85614ab8565b5f614996826301ffc9a760e01b6149b6565b801561085757506149af826001600160e01b03196149b6565b1592915050565b5f5f6301ffc9a760e01b836040516024016149d191906156e6565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f519050828015614a2e575060208210155b8015614a3957505f81115b979650505050505050565b60605f5f856001600160a01b031685604051614a6091906158f4565b5f60405180830381855af49150503d805f8114614a98576040519150601f19603f3d011682016040523d82523d5f602084013e614a9d565b606091505b5091509150614aae86838387614b80565b9695505050505050565b606082471015614b195760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610983565b5f5f866001600160a01b03168587604051614b3491906158f4565b5f6040518083038185875af1925050503d805f8114614b6e576040519150601f19603f3d011682016040523d82523d5f602084013e614b73565b606091505b5091509150614a39878383875b60608315614bee5782515f03614be7576001600160a01b0385163b614be75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610983565b50816113bf565b6113bf8383815115614c035781518083602001fd5b8060405162461bcd60e51b81526004016109839190614c7b565b6001600160e01b031981168114610ca0575f5ffd5b5f60208284031215614c42575f5ffd5b8135612f4d81614c1d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f4d6020830184614c4d565b634e487b7160e01b5f52604160045260245ffd5b6040516101c0810167ffffffffffffffff81118282101715614cc557614cc5614c8d565b60405290565b5f82601f830112614cda575f5ffd5b8135602083015f5f67ffffffffffffffff841115614cfa57614cfa614c8d565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614d2957614d29614c8d565b604052838152905080828401871015614d40575f5ffd5b838360208301375f602085830101528094505050505092915050565b6001600160a01b0381168114610ca0575f5ffd5b5f5f5f60608486031215614d82575f5ffd5b833567ffffffffffffffff811115614d98575f5ffd5b614da486828701614ccb565b935050602084013567ffffffffffffffff811115614dc0575f5ffd5b614dcc86828701614ccb565b9250506040840135614ddd81614d5c565b809150509250925092565b5f60208284031215614df8575f5ffd5b5035919050565b5f5f60408385031215614e10575f5ffd5b8235614e1b81614d5c565b946020939093013593505050565b5f5f5f60608486031215614e3b575f5ffd5b8335614e4681614d5c565b92506020840135614e5681614d5c565b929592945050506040919091013590565b5f60208284031215614e77575f5ffd5b8135612f4d81614d5c565b634e487b7160e01b5f52602160045260245ffd5b60048110610ca057634e487b7160e01b5f52602160045260245ffd5b60208101614ebf83614e96565b91905290565b803561390481614d5c565b803564ffffffffff81168114613904575f5ffd5b5f6101c08284031215614ef5575f5ffd5b614efd614ca1565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201529050614f776101608301614ec5565b610160820152614f8a6101808301614ed0565b610180820152614f9d6101a08301614ed0565b6101a082015292915050565b80356bffffffffffffffffffffffff81168114613904575f5ffd5b5f5f5f5f6103c08587031215614fd8575f5ffd5b614fe28686614ee4565b9350614ff2866101c08701614ee4565b925061038085013561500381614d5c565b91506150126103a08601614fa9565b905092959194509250565b5f5f6040838503121561502e575f5ffd5b823561503981614d5c565b9150602083013567ffffffffffffffff811115615054575f5ffd5b61506085828601614ccb565b9150509250929050565b5f6020828403121561507a575f5ffd5b813567ffffffffffffffff811115615090575f5ffd5b6113bf84828501614ccb565b60048110610ca0575f5ffd5b5f5f604083850312156150b9575f5ffd5b82356150c481614d5c565b915060208301356150d48161509c565b809150509250929050565b5f5f5f5f61022085870312156150f3575f5ffd5b6150fd8686614ee4565b93506101c085013561510e81614d5c565b92506101e085013561511f81614d5c565b91506150126102008601614fa9565b5f6101c0828403121561513f575f5ffd5b50919050565b5f6101c08284031215615156575f5ffd5b612f4d838361512e565b5f5f6101e08385031215615172575f5ffd5b61517c848461512e565b946101c0939093013593505050565b5f5f6020838503121561519c575f5ffd5b823567ffffffffffffffff8111156151b2575f5ffd5b8301601f810185136151c2575f5ffd5b803567ffffffffffffffff8111156151d8575f5ffd5b8560206101c0830284010111156151ed575f5ffd5b6020919091019590945092505050565b8015158114610ca0575f5ffd5b5f5f6040838503121561521b575f5ffd5b823561522681614d5c565b915060208301356150d4816151fd565b5f5f5f5f60808587031215615249575f5ffd5b843561525481614d5c565b9350602085013561526481614d5c565b925060408501359150606085013567ffffffffffffffff811115615286575f5ffd5b61529287828801614ccb565b91505092959194509250565b5f5f604083850312156152af575f5ffd5b82356152ba81614d5c565b91506152c860208401614fa9565b90509250929050565b5f5f604083850312156152e2575f5ffd5b82356152ed81614d5c565b915060208301356150d481614d5c565b5f5f6101e0838503121561530f575f5ffd5b615319848461512e565b91506101c08301356150d4816151fd565b600181811c9082168061533e57607f821691505b60208210810361513f57634e487b7160e01b5f52602260045260245ffd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215615451575f5ffd5b8151612f4d81614d5c565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516154e66101608401826001600160a01b03169052565b5061018081015161550161018084018264ffffffffff169052565b506101a0810151610b906101a084018264ffffffffff169052565b610380810161552b828561545c565b612f4d6101c083018461545c565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561085757610857615539565b6101c08101610857828461545c565b5f6020828403121561557f575f5ffd5b5051919050565b601f821115610b9057805f5260205f20601f840160051c810160208510156155ab5750805b601f840160051c820191505b818110156155ca575f81556001016155b7565b5050505050565b815167ffffffffffffffff8111156155eb576155eb614c8d565b6155ff816155f9845461532a565b84615586565b6020601f821160018114615631575f831561561a5750848201515b5f19600385901b1c1916600184901b1784556155ca565b5f84815260208120601f198516915b828110156156605787850151825560209485019460019092019101615640565b508482101561567d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6040810161569984614e96565b8382526156a583614e96565b8260208301529392505050565b5f602082840312156156c2575f5ffd5b612f4d82614ed0565b5f6101c082840312156156dc575f5ffd5b612f4d8383614ee4565b6001600160e01b031991909116815260200190565b5f6020828403121561570b575f5ffd5b8151612f4d816151fd565b6001600160a01b0383168152604081016156a583614e96565b6040810161573c84614e96565b9281526020015290565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561085757610857615539565b5f81518060208401855e5f93019283525090919050565b5f6113bf615792838661576d565b8461576d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6020828403121561588a575f5ffd5b8151612f4d81614c1d565b6001600160a01b038416815261020081016158b3602083018561545c565b826101e0830152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614aae90830184614c4d565b5f612f4d828461576d56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b1da5c23d2dc17f863551361c2deb4ca7a4e8ea0ebc43276c37001fa42c1758064736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
