{
  "_format": "hh-sol-artifact-1",
  "contractName": "LTOCustody",
  "sourceName": "contracts/marketplace/LTOCustody.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidBuyer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidOrder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidRecipient",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSeller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LTOAlreadyInitiated",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LTONotInitiated",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OrderIsNotFulfilled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenAlreadyInLTO",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        }
      ],
      "name": "AssetBuyerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "seller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        }
      ],
      "name": "AssetDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "AssetReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "seller",
          "type": "address"
        }
      ],
      "name": "AssetSellerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "CustodyAdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "CustodyAdminRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CUSTODY_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addCustodyAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        }
      ],
      "name": "cancel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        }
      ],
      "name": "complete",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        }
      ],
      "name": "getLtoCsutodyTokenCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getLtoCsutodyTokenId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "counters",
          "type": "uint256[]"
        }
      ],
      "name": "getLtoCustodyId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IUNSRegistry",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "contract IMintingManager",
          "name": "_mintingManager",
          "type": "address"
        },
        {
          "internalType": "contract SeaportProxyBuyer",
          "name": "_seaportProxyBuyer",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "seller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "initiateLTO",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "offerer",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "zone",
                  "type": "address"
                },
                {
                  "components": [
                    {
                      "internalType": "enum ItemType",
                      "name": "itemType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "identifierOrCriteria",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "startAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "endAmount",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct OfferItem[]",
                  "name": "offer",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "enum ItemType",
                      "name": "itemType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "identifierOrCriteria",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "startAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "endAmount",
                      "type": "uint256"
                    },
                    {
                      "internalType": "address payable",
                      "name": "recipient",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct ConsiderationItem[]",
                  "name": "consideration",
                  "type": "tuple[]"
                },
                {
                  "internalType": "enum OrderType",
                  "name": "orderType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint256",
                  "name": "startTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "endTime",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "zoneHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "salt",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "conduitKey",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "totalOriginalConsiderationItems",
                  "type": "uint256"
                }
              ],
              "internalType": "struct OrderParameters",
              "name": "parameters",
              "type": "tuple"
            },
            {
              "internalType": "uint120",
              "name": "numerator",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "denominator",
              "type": "uint120"
            },
            {
              "internalType": "bytes",
              "name": "signature",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct AdvancedOrder",
          "name": "advancedOrder",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "orderIndex",
              "type": "uint256"
            },
            {
              "internalType": "enum Side",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "identifier",
              "type": "uint256"
            },
            {
              "internalType": "bytes32[]",
              "name": "criteriaProof",
              "type": "bytes32[]"
            }
          ],
          "internalType": "struct CriteriaResolver[]",
          "name": "criteriaResolvers",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes32",
          "name": "fulfillerConduitKey",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "initiateLTOFromOrder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isCustodyAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        }
      ],
      "name": "isLTOInitiated",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "isTokenInLTOCustody",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ltoAssets",
      "outputs": [
        {
          "internalType": "address",
          "name": "seller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isFinalized",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintingManager",
      "outputs": [
        {
          "internalType": "contract IMintingManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "nonceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "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": "registry",
      "outputs": [
        {
          "internalType": "contract IUNSRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "removeCustodyAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "revokeAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "seaportProxyBuyer",
      "outputs": [
        {
          "internalType": "contract SeaportProxyBuyer",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "keys",
          "type": "string[]"
        },
        {
          "internalType": "string[]",
          "name": "values",
          "type": "string[]"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "resetRecords",
          "type": "bool"
        }
      ],
      "name": "setRecords",
      "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": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenLTOs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenLtoIdCounter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        }
      ],
      "name": "transferBuyer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "ltoId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "seller",
          "type": "address"
        }
      ],
      "name": "transferSeller",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61351180620000ee5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637b10399911610140578063b6240e5b116100bf578063cd42426011610084578063cd42426014610577578063d547741f1461058b578063d8ed07af1461059e578063ecdb813d146105c1578063f2fde38b146105e1578063f5383497146105f4575f80fd5b8063b6240e5b14610518578063c0c53b8b1461052b578063c2ed6bc51461053e578063ca73f88914610551578063cc8473f914610564575f80fd5b8063980a674811610105578063980a6748146104715780639efd1b13146104d8578063a217fddf146104eb578063a4247400146104f2578063a850413014610505575f80fd5b80637b1039991461041e5780638456cb59146104325780638da5cb5b1461043a57806391d148541461044b578063971d852f1461045e575f80fd5b806340e58ee5116101cc578063657d114411610191578063657d1144146103ca57806366ad0b52146103dd57806367ce591f146103f05780636ccbae5f14610403578063715018a614610416575f80fd5b806340e58ee51461035c5780634f724db01461036f578063572b6c051461038f57806358884432146103ab5780635c975abb146103bf575f80fd5b8063248a9ca311610212578063248a9ca3146102e85780632a6062f1146103195780632f2ff15d1461032c57806336568abe146103415780633f4ba83a14610354575f80fd5b806301ffc9a71461024e5780630ea6d2f3146102765780630f1201cc146102a25780631bf7e13e146102b557806321947212146102d5575b5f80fd5b61026161025c3660046125f4565b610607565b60405190151581526020015b60405180910390f35b6101925461028a906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b6102616102b036600461261b565b61063d565b6102c86102c3366004612632565b610672565b60405161026d9190612714565b6102616102e336600461261b565b61073b565b61030b6102f636600461261b565b5f90815261012d602052604090206001015490565b60405190815260200161026d565b61030b610327366004612726565b6107cf565b61033f61033a36600461276a565b610803565b005b61033f61034f36600461276a565b61082d565b61033f6108c0565b61033f61036a36600461261b565b6108d2565b61030b61037d36600461261b565b6101956020525f908152604090205481565b61026161039d366004612798565b6001600160a01b0316301490565b6101935461028a906001600160a01b031681565b60975460ff16610261565b61033f6103d836600461261b565b6109bb565b61033f6103eb3660046127b3565b610a83565b61033f6103fe366004612798565b610c1f565b61030b61041136600461261b565b610c73565b61033f610ccc565b6101915461028a906001600160a01b031681565b61033f610cdd565b60c9546001600160a01b031661028a565b61026161045936600461276a565b610ced565b61033f61046c36600461261b565b610d18565b6104b061047f36600461261b565b6101946020525f90815260409020805460018201546003909201546001600160a01b03918216929091169060ff1683565b604080516001600160a01b03948516815293909216602084015215159082015260600161026d565b61033f6104e636600461276a565b610de5565b61030b5f81565b610261610500366004612632565b610ec9565b61033f61051336600461283e565b610f1a565b610261610526366004612798565b61107c565b61033f6105393660046128c3565b611094565b61033f61054c36600461290b565b611212565b61033f61055f36600461276a565b611359565b61030b610572366004612a7b565b611432565b61030b5f805160206134e583398151915281565b61033f61059936600461276a565b611465565b61030b6105ac36600461261b565b5f908152610194602052604090206002015490565b61030b6105cf36600461261b565b6101966020525f908152604090205481565b61033f6105ef366004612798565b61148a565b61033f610602366004612798565b611503565b5f6001600160e01b03198216637965db0b60e01b148061063757506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8181526101946020526040812060020154158015906106375750505f908152610194602052604090206003015460ff161590565b60605f5a9050610683858585610ec9565b6106a057604051638baa579f60e01b815260040160405180910390fd5b6107306106b06020870187612798565b306040880135846106c460608b018b612ada565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061155892505050565b9150505b9392505050565b5f8181526101956020526040812054158015906106375750610191546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa15801561079b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bf9190612b1c565b6001600160a01b03161492915050565b5f828152610194602052604081206002018054839081106107f2576107f2612b37565b905f5260205f200154905092915050565b5f82815261012d602052604090206001015461081e81611636565b6108288383611647565b505050565b6108356116ce565b6001600160a01b0316816001600160a01b0316146108b25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108bc82826116dc565b5050565b6108c8611761565b6108d06117da565b565b6108dd6105266116ce565b6108f9576040516282b42960e81b815260040160405180910390fd5b610901611832565b61090a8161063d565b61092757604051633f030d6d60e01b815260040160405180910390fd5b5f5b5f828152610194602052604090206002015481101561099c575f82815261019460205260409020600201805461099491908390811061096a5761096a612b37565b5f9182526020808320909101548583526101949091526040909120546001600160a01b0316611878565b600101610929565b505f90815261019460205260409020600301805460ff19166001179055565b6109c66105266116ce565b6109e2576040516282b42960e81b815260040160405180910390fd5b600260655403610a045760405162461bcd60e51b81526004016108a990612b4b565b6002606555610a11611832565b5f8181526101956020526040902054610a298261073b565b610a4657604051633f030d6d60e01b815260040160405180910390fd5b61019354610a5e9083906001600160a01b0316611878565b5f90815261019460205260409020600301805460ff1916600190811790915560655550565b600260655403610aa55760405162461bcd60e51b81526004016108a990612b4b565b6002606555610ab56105266116ce565b610ad1576040516282b42960e81b815260040160405180910390fd5b610ad9611832565b5f610ae58484846119b2565b610191546040516331a9108f60e11b81526004810185905291925030916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610b32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b569190612b1c565b6001600160a01b031614610bcd57610191546040516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201859052909116906323b872dd906064015f604051808303815f87803b158015610bb6575f80fd5b505af1158015610bc8573d5f803e3d5ffd5b505050505b604080516001600160a01b03808716825285166020820152839183917fd33e100d324477d0c48d17ab70e096443fc9dd28775952e65f3806b7253467d1910160405180910390a3505060016065555050565b610c27611761565b610c3e5f805160206134e583398151915282611b96565b6040516001600160a01b038216907eabe768b82800e7d5614169467c9ce6a18df23b00ea0c3536791f7c6ff5c0d0905f90a250565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610cc5906060016040516020818303038152906040528051906020012090565b5492915050565b610cd4611761565b6108d05f611ba0565b610ce5611761565b6108d0611bf1565b5f91825261012d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610d236105266116ce565b610d3f576040516282b42960e81b815260040160405180910390fd5b610d47611832565b610d508161063d565b610d6d57604051633f030d6d60e01b815260040160405180910390fd5b5f5b5f828152610194602052604090206002015481101561099c575f828152610194602052604090206002018054610ddd919083908110610db057610db0612b37565b5f9182526020808320909101548583526101949091526040909120600101546001600160a01b0316611878565b600101610d6f565b610df06105266116ce565b610e0c576040516282b42960e81b815260040160405180910390fd5b610e14611832565b610e1d8261063d565b610e3a57604051633f030d6d60e01b815260040160405180910390fd5b6001600160a01b038116610e61576040516358ef870360e11b815260040160405180910390fd5b5f828152610194602090815260409182902060010180546001600160a01b0319166001600160a01b038516908117909155915191825283917ff92b34d7c01f8cf2b457fb33321c0392c514bf4b1f5edc9f78bfcedd16d4915e91015b60405180910390a25050565b5f610f12610ed685612b82565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611c2f92505050565b949350505050565b5f8281526101956020526040902054610f328161063d565b610f4f57604051633f030d6d60e01b815260040160405180910390fd5b610f576116ce565b5f82815261019460205260409020600101546001600160a01b03908116911614610f93576040516282b42960e81b815260040160405180910390fd5b610f9b611832565b811561100c57610191546040516376094f7560e11b81526001600160a01b039091169063ec129eea90610fda908a908a908a908a908a90600401612d06565b5f604051808303815f87803b158015610ff1575f80fd5b505af1158015611003573d5f803e3d5ffd5b50505050611073565b61019154604051636749599f60e11b81526001600160a01b039091169063ce92b33e90611045908a908a908a908a908a90600401612d06565b5f604051808303815f87803b15801561105c575f80fd5b505af115801561106e573d5f803e3d5ffd5b505050505b50505050505050565b5f6106375f805160206134e583398151915283610ced565b5f54610100900460ff16158080156110b257505f54600160ff909116105b806110cb5750303b1580156110cb57505f5460ff166001145b61112e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a9565b5f805460ff19166001179055801561114f575f805461ff0019166101001790555b611157611d6a565b61115f611d98565b611167611dc6565b61116f611df4565b611177611e22565b61117f611e58565b611187611e7e565b61019180546001600160a01b038087166001600160a01b0319928316179092556101938054868416908316179055610192805492851692909116919091179055801561120c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6002606554036112345760405162461bcd60e51b81526004016108a990612b4b565b60026065556112446105266116ce565b611260576040516282b42960e81b815260040160405180910390fd5b611268611832565b5f805f6112758885611eb5565b9250925092505f6112878484846119b2565b610192546040516339eb2ac960e21b81529192506001600160a01b03169063e7acab24906112c1908c908c908c908c903090600401613049565b6020604051808303815f875af11580156112dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611301919061321f565b50604080516001600160a01b03808716825285166020820152839183917fd33e100d324477d0c48d17ab70e096443fc9dd28775952e65f3806b7253467d1910160405180910390a35050600160655550505050505050565b6113646105266116ce565b611380576040516282b42960e81b815260040160405180910390fd5b611388611832565b6113918261063d565b6113ae57604051633f030d6d60e01b815260040160405180910390fd5b6001600160a01b0381166113d55760405163bab7ca3560e01b815260040160405180910390fd5b5f828152610194602090815260409182902080546001600160a01b0319166001600160a01b038516908117909155915191825283917fe3ece063b84a0e16e6080f268ec65ce9c2af3f48ad754f332a34c1eec29dcd939101610ebd565b5f8282604051602001611446929190613269565b60408051601f1981840301815291905280516020909101209392505050565b5f82815261012d602052604090206001015461148081611636565b61082883836116dc565b611492611761565b6001600160a01b0381166114f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a9565b61150081611ba0565b50565b61150b611761565b6115225f805160206134e583398151915282611465565b6040516001600160a01b038216907f7ec703108af80ed3dd35e047e5ca6c6d465aa7adab3855dfdb91686333ed584a905f90a250565b606061156385611fac565b5f80876001600160a01b03168661157c8b8a8989612011565b604051611589919061328d565b5f604051808303815f8787f1925050503d805f81146115c3576040519150601f19603f3d011682016040523d82523d5f602084013e6115c8565b606091505b5090925090506115d9603f876132bc565b5a116115e7576115e76132db565b61162782826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250612041565b925050505b9695505050505050565b611500816116426116ce565b61207a565b6116518282610ced565b6108bc575f82815261012d602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561168a6116ce565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f6116d76120de565b905090565b6116e68282610ced565b156108bc575f82815261012d602090815260408083206001600160a01b03851684529091529020805460ff1916905561171d6116ce565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6117696116ce565b6001600160a01b031661178460c9546001600160a01b031690565b6001600160a01b0316146108d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a9565b6117e26120f8565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118156116ce565b6040516001600160a01b03909116815260200160405180910390a1565b60975460ff16156108d05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108a9565b5f828152610195602052604080822080549290556101915490516331a9108f60e11b81526004810185905230916001600160a01b031690636352211e90602401602060405180830381865afa1580156118d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f79190612b1c565b6001600160a01b03160361082857610191546040516323b872dd60e01b81523060048201526001600160a01b03848116602483015260448201869052909116906323b872dd906064015f604051808303815f87803b158015611957575f80fd5b505af1158015611969573d5f803e3d5ffd5b50506040516001600160a01b03851681528592508391507f71f3f9a8aef7f77c5f9ddfd8c83f383ffa885f16dc7ab97046f9f70f4a4959e49060200160405180910390a3505050565b5f6001600160a01b0384166119da5760405163bab7ca3560e01b815260040160405180910390fd5b6001600160a01b038316611a01576040516358ef870360e11b815260040160405180910390fd5b611a0a8261073b565b15611a2857604051634517741560e01b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905082815f81518110611a5c57611a5c612b37565b60209081029190910101526040805160018082528183019092525f918160200160208202803683375050505f8581526101966020526040812054825192935091839190611aab57611aab612b37565b6020026020010181815250505f611ac28383611432565b604080516080810182526001600160a01b03808b16825289811660208084019182528385018981525f60608601819052878152610194835295909520845181549085166001600160a01b0319918216178255925160018201805491909516931692909217909255925180519495509193611b429260028501920190612597565b50606091909101516003909101805460ff19169115159190911790555f858152610195602090815260408083208490556101969091528120805491611b86836132ef565b9091555090979650505050505050565b6108bc8282611647565b60c980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b611bf9611832565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118156116ce565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015611c73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c979190613307565b90505f611d44866060015180519060200120868860200151604051602001611ce49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561162c5750855161162c906001600160a01b03168286612141565b5f54610100900460ff16611d905760405162461bcd60e51b81526004016108a99061331e565b6108d0611e58565b5f54610100900460ff16611dbe5760405162461bcd60e51b81526004016108a99061331e565b611d90611e58565b5f54610100900460ff16611dec5760405162461bcd60e51b81526004016108a99061331e565b6108d061227c565b5f54610100900460ff16611e1a5760405162461bcd60e51b81526004016108a99061331e565b6108d06122a9565b5f54610100900460ff16611e485760405162461bcd60e51b81526004016108a99061331e565b6108d0611e536116ce565b611ba0565b5f54610100900460ff166108d05760405162461bcd60e51b81526004016108a99061331e565b5f54610100900460ff16611ea45760405162461bcd60e51b81526004016108a99061331e565b6108d05f611eb06116ce565b611b96565b5f8080611ec28580613369565b611ed090604081019061337e565b9050600103611f8c5736611ee48680613369565b611ef290604081019061337e565b5f818110611f0257611f02612b37565b60a00291909101915060029050611f1c60208301836133c2565b6005811115611f2d57611f2d612d91565b148015611f5d5750610191546001600160a01b0316611f526040830160208401612798565b6001600160a01b0316145b15611f8a57611f6c8680613369565b611f7a906020810190612798565b9350849250604001359050611fa5565b505b60405163af61069360e01b815260040160405180910390fd5b9250925092565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506120008190565b5461200c9060016133db565b905550565b6060828585604051602001612028939291906133ee565b6040516020818303038152906040529050949350505050565b60608315612050575081610734565b8251156120605782518084602001fd5b8160405162461bcd60e51b81526004016108a99190612714565b6120848282610ced565b6108bc5761209c816001600160a01b031660146122db565b6120a78360206122db565b6040516020016120b892919061342c565b60408051601f198184030181529082905262461bcd60e51b82526108a991600401612714565b5f3033036120f3575060331936013560601c90565b503390565b60975460ff166108d05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108a9565b5f805f61214e8585612470565b90925090505f81600481111561216657612166612d91565b1480156121845750856001600160a01b0316826001600160a01b0316145b1561219457600192505050610734565b5f80876001600160a01b0316631626ba7e60e01b88886040516024016121bb9291906134a0565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516121f9919061328d565b5f60405180830381855afa9150503d805f8114612231576040519150601f19603f3d011682016040523d82523d5f602084013e612236565b606091505b5091509150818015612249575080516020145b801561227057508051630b135d3f60e11b9061226e9083016020908101908401613307565b145b98975050505050505050565b5f54610100900460ff166122a25760405162461bcd60e51b81526004016108a99061331e565b6001606555565b5f54610100900460ff166122cf5760405162461bcd60e51b81526004016108a99061331e565b6097805460ff19169055565b60605f6122e98360026134b8565b6122f49060026133db565b6001600160401b0381111561230b5761230b612993565b6040519080825280601f01601f191660200182016040528015612335576020820181803683370190505b509050600360fc1b815f8151811061234f5761234f612b37565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061237d5761237d612b37565b60200101906001600160f81b03191690815f1a9053505f61239f8460026134b8565b6123aa9060016133db565b90505b6001811115612421576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106123de576123de612b37565b1a60f81b8282815181106123f4576123f4612b37565b60200101906001600160f81b03191690815f1a90535060049490941c9361241a816134cf565b90506123ad565b5083156107345760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a9565b5f8082516041036124a4576020830151604084015160608501515f1a612498878285856124b2565b945094505050506124ab565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124e757505f9050600361258e565b8460ff16601b141580156124ff57508460ff16601c14155b1561250f57505f9050600461258e565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612560573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116612588575f6001925092505061258e565b91505f90505b94509492505050565b828054828255905f5260205f209081019282156125d0579160200282015b828111156125d05782518255916020019190600101906125b5565b506125dc9291506125e0565b5090565b5b808211156125dc575f81556001016125e1565b5f60208284031215612604575f80fd5b81356001600160e01b031981168114610734575f80fd5b5f6020828403121561262b575f80fd5b5035919050565b5f805f60408486031215612644575f80fd5b83356001600160401b038082111561265a575f80fd5b908501906080828803121561266d575f80fd5b90935060208501359080821115612682575f80fd5b818601915086601f830112612695575f80fd5b8135818111156126a3575f80fd5b8760208285010111156126b4575f80fd5b6020830194508093505050509250925092565b5f5b838110156126e15781810151838201526020016126c9565b50505f910152565b5f81518084526127008160208601602086016126c7565b601f01601f19169290920160200192915050565b602081525f61073460208301846126e9565b5f8060408385031215612737575f80fd5b50508035926020909101359150565b6001600160a01b0381168114611500575f80fd5b803561276581612746565b919050565b5f806040838503121561277b575f80fd5b82359150602083013561278d81612746565b809150509250929050565b5f602082840312156127a8575f80fd5b813561073481612746565b5f805f606084860312156127c5575f80fd5b83356127d081612746565b925060208401356127e081612746565b929592945050506040919091013590565b5f8083601f840112612801575f80fd5b5081356001600160401b03811115612817575f80fd5b6020830191508360208260051b85010111156124ab575f80fd5b8015158114611500575f80fd5b5f805f805f8060808789031215612853575f80fd5b86356001600160401b0380821115612869575f80fd5b6128758a838b016127f1565b9098509650602089013591508082111561288d575f80fd5b5061289a89828a016127f1565b9095509350506040870135915060608701356128b581612831565b809150509295509295509295565b5f805f606084860312156128d5575f80fd5b83356128e081612746565b925060208401356128f081612746565b9150604084013561290081612746565b809150509250925092565b5f805f805f6080868803121561291f575f80fd5b85356001600160401b0380821115612935575f80fd5b9087019060a0828a031215612948575f80fd5b9095506020870135908082111561295d575f80fd5b5061296a888289016127f1565b90955093505060408601359150606086013561298581612746565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156129c9576129c9612993565b60405290565b604051601f8201601f191681016001600160401b03811182821017156129f7576129f7612993565b604052919050565b5f82601f830112612a0e575f80fd5b813560206001600160401b03821115612a2957612a29612993565b8160051b612a388282016129cf565b9283528481018201928281019087851115612a51575f80fd5b83870192505b84831015612a7057823582529183019190830190612a57565b979650505050505050565b5f8060408385031215612a8c575f80fd5b82356001600160401b0380821115612aa2575f80fd5b612aae868387016129ff565b93506020850135915080821115612ac3575f80fd5b50612ad0858286016129ff565b9150509250929050565b5f808335601e19843603018112612aef575f80fd5b8301803591506001600160401b03821115612b08575f80fd5b6020019150368190038213156124ab575f80fd5b5f60208284031215612b2c575f80fd5b815161073481612746565b634e487b7160e01b5f52603260045260245ffd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f60808236031215612b92575f80fd5b612b9a6129a7565b8235612ba581612746565b8152602083810135818301526040808501359083015260608401356001600160401b0380821115612bd4575f80fd5b9085019036601f830112612be6575f80fd5b813581811115612bf857612bf8612993565b612c0a601f8201601f191685016129cf565b91508082523684828501011115612c1f575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612c7b575f80fd5b83016020810192503590506001600160401b03811115612c99575f80fd5b8036038213156124ab575f80fd5b5f838385526020808601955060208560051b830101845f5b87811015612cf957848303601f19018952612cda8288612c66565b612ce5858284612c3e565b9a86019a9450505090830190600101612cbf565b5090979650505050505050565b606081525f612d19606083018789612ca7565b8281036020840152612d2c818688612ca7565b9150508260408301529695505050505050565b5f808335601e19843603018112612d54575f80fd5b83016020810192503590506001600160401b03811115612d72575f80fd5b60a0810236038213156124ab575f80fd5b803560068110612765575f80fd5b634e487b7160e01b5f52602160045260245ffd5b60068110612db557612db5612d91565b9052565b8183525f60208085019450825f5b85811015612e2b57612de187612ddc84612d83565b612da5565b82820135612dee81612746565b6001600160a01b03168388015260408281013590880152606080830135908801526080808301359088015260a09687019690910190600101612dc7565b509495945050505050565b5f808335601e19843603018112612e4b575f80fd5b83016020810192503590506001600160401b03811115612e69575f80fd5b60c0810236038213156124ab575f80fd5b8183525f60208085019450825f5b85811015612e2b57612e9d87612ddc84612d83565b82820135612eaa81612746565b6001600160a01b039081168885015260408381013590890152606080840135908901526080808401359089015260a09083820135612ee781612746565b169088015260c0968701969190910190600101612e88565b803560058110612765575f80fd5b60058110612db557612db5612d91565b80356001600160781b0381168114612765575f80fd5b8183525f6001600160fb1b03831115612f4a575f80fd5b8260051b80836020870137939093016020019392505050565b8183526020808401935f91600585811b8301820185855b8881101561303b57858303601f19018a52813536899003609e19018112612f9f575f80fd5b88018035845260a08682013560028110612fb7575f80fd5b85880152604082810135908601526060808301359086015260808083013536849003601e19018112612fe7575f80fd5b9092018781019290356001600160401b03811115613003575f80fd5b80881b3603841315613013575f80fd5b82828801526130258388018286612f33565b9d89019d96505050928601925050600101612f7a565b509098975050505050505050565b608081525f610120873561015e19893603018112613065575f80fd5b60a06080850152880161308a82850161307d8361275a565b6001600160a01b03169052565b6130966020820161275a565b6101406130ad818701836001600160a01b03169052565b6130ba6040840184612d3f565b6101608881015292506130d261028088018483612db9565b9250506130e26060840184612e36565b87840361011f19016101808901526130fb848284612e7a565b9350505061310b60808401612eff565b6131196101a0880182612f0d565b5060a08301356101c087015260c08301356101e087015260e083013561020087015261010080840135610220880152848401356102408801528184013561026088015261316860208d01612f1d565b6001600160781b03811660a0890152945061318560408d01612f1d565b6001600160781b03811660c089015294506131a360608d018d612c66565b95509350607f199150818784030160e08801526131c1838686612c3e565b94506131d060808d018d612c66565b9450925081878603018188015250506131ea838383612c3e565b925050508281036020840152613201818789612f63565b91505083604083015261162c60608301846001600160a01b03169052565b5f6020828403121561322f575f80fd5b815161073481612831565b5f815180845260208085019450602084015f5b83811015612e2b5781518752958201959082019060010161324d565b604081525f61327b604083018561323a565b8281036020840152610730818561323a565b5f825161329e8184602087016126c7565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b5f826132d657634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b5f60018201613300576133006132a8565b5060010190565b5f60208284031215613317575f80fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f823561015e1983360301811261329e575f80fd5b5f808335601e19843603018112613393575f80fd5b8301803591506001600160401b038211156133ac575f80fd5b602001915060a0810236038213156124ab575f80fd5b5f602082840312156133d2575f80fd5b61073482612d83565b80820180821115610637576106376132a8565b5f84516133ff8184602089016126c7565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516134638160178501602088016126c7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516134948160288401602088016126c7565b01602801949350505050565b828152604060208201525f610f1260408301846126e9565b8082028115828204841417610637576106376132a8565b5f816134dd576134dd6132a8565b505f19019056fee42a2a81871991b348b461cd4ff9825352fd011597c5280ce35326126d53efbca164736f6c6343000818000a",
  "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637b10399911610140578063b6240e5b116100bf578063cd42426011610084578063cd42426014610577578063d547741f1461058b578063d8ed07af1461059e578063ecdb813d146105c1578063f2fde38b146105e1578063f5383497146105f4575f80fd5b8063b6240e5b14610518578063c0c53b8b1461052b578063c2ed6bc51461053e578063ca73f88914610551578063cc8473f914610564575f80fd5b8063980a674811610105578063980a6748146104715780639efd1b13146104d8578063a217fddf146104eb578063a4247400146104f2578063a850413014610505575f80fd5b80637b1039991461041e5780638456cb59146104325780638da5cb5b1461043a57806391d148541461044b578063971d852f1461045e575f80fd5b806340e58ee5116101cc578063657d114411610191578063657d1144146103ca57806366ad0b52146103dd57806367ce591f146103f05780636ccbae5f14610403578063715018a614610416575f80fd5b806340e58ee51461035c5780634f724db01461036f578063572b6c051461038f57806358884432146103ab5780635c975abb146103bf575f80fd5b8063248a9ca311610212578063248a9ca3146102e85780632a6062f1146103195780632f2ff15d1461032c57806336568abe146103415780633f4ba83a14610354575f80fd5b806301ffc9a71461024e5780630ea6d2f3146102765780630f1201cc146102a25780631bf7e13e146102b557806321947212146102d5575b5f80fd5b61026161025c3660046125f4565b610607565b60405190151581526020015b60405180910390f35b6101925461028a906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b6102616102b036600461261b565b61063d565b6102c86102c3366004612632565b610672565b60405161026d9190612714565b6102616102e336600461261b565b61073b565b61030b6102f636600461261b565b5f90815261012d602052604090206001015490565b60405190815260200161026d565b61030b610327366004612726565b6107cf565b61033f61033a36600461276a565b610803565b005b61033f61034f36600461276a565b61082d565b61033f6108c0565b61033f61036a36600461261b565b6108d2565b61030b61037d36600461261b565b6101956020525f908152604090205481565b61026161039d366004612798565b6001600160a01b0316301490565b6101935461028a906001600160a01b031681565b60975460ff16610261565b61033f6103d836600461261b565b6109bb565b61033f6103eb3660046127b3565b610a83565b61033f6103fe366004612798565b610c1f565b61030b61041136600461261b565b610c73565b61033f610ccc565b6101915461028a906001600160a01b031681565b61033f610cdd565b60c9546001600160a01b031661028a565b61026161045936600461276a565b610ced565b61033f61046c36600461261b565b610d18565b6104b061047f36600461261b565b6101946020525f90815260409020805460018201546003909201546001600160a01b03918216929091169060ff1683565b604080516001600160a01b03948516815293909216602084015215159082015260600161026d565b61033f6104e636600461276a565b610de5565b61030b5f81565b610261610500366004612632565b610ec9565b61033f61051336600461283e565b610f1a565b610261610526366004612798565b61107c565b61033f6105393660046128c3565b611094565b61033f61054c36600461290b565b611212565b61033f61055f36600461276a565b611359565b61030b610572366004612a7b565b611432565b61030b5f805160206134e583398151915281565b61033f61059936600461276a565b611465565b61030b6105ac36600461261b565b5f908152610194602052604090206002015490565b61030b6105cf36600461261b565b6101966020525f908152604090205481565b61033f6105ef366004612798565b61148a565b61033f610602366004612798565b611503565b5f6001600160e01b03198216637965db0b60e01b148061063757506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8181526101946020526040812060020154158015906106375750505f908152610194602052604090206003015460ff161590565b60605f5a9050610683858585610ec9565b6106a057604051638baa579f60e01b815260040160405180910390fd5b6107306106b06020870187612798565b306040880135846106c460608b018b612ada565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f9201919091525061155892505050565b9150505b9392505050565b5f8181526101956020526040812054158015906106375750610191546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e90602401602060405180830381865afa15801561079b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bf9190612b1c565b6001600160a01b03161492915050565b5f828152610194602052604081206002018054839081106107f2576107f2612b37565b905f5260205f200154905092915050565b5f82815261012d602052604090206001015461081e81611636565b6108288383611647565b505050565b6108356116ce565b6001600160a01b0316816001600160a01b0316146108b25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108bc82826116dc565b5050565b6108c8611761565b6108d06117da565b565b6108dd6105266116ce565b6108f9576040516282b42960e81b815260040160405180910390fd5b610901611832565b61090a8161063d565b61092757604051633f030d6d60e01b815260040160405180910390fd5b5f5b5f828152610194602052604090206002015481101561099c575f82815261019460205260409020600201805461099491908390811061096a5761096a612b37565b5f9182526020808320909101548583526101949091526040909120546001600160a01b0316611878565b600101610929565b505f90815261019460205260409020600301805460ff19166001179055565b6109c66105266116ce565b6109e2576040516282b42960e81b815260040160405180910390fd5b600260655403610a045760405162461bcd60e51b81526004016108a990612b4b565b6002606555610a11611832565b5f8181526101956020526040902054610a298261073b565b610a4657604051633f030d6d60e01b815260040160405180910390fd5b61019354610a5e9083906001600160a01b0316611878565b5f90815261019460205260409020600301805460ff1916600190811790915560655550565b600260655403610aa55760405162461bcd60e51b81526004016108a990612b4b565b6002606555610ab56105266116ce565b610ad1576040516282b42960e81b815260040160405180910390fd5b610ad9611832565b5f610ae58484846119b2565b610191546040516331a9108f60e11b81526004810185905291925030916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610b32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b569190612b1c565b6001600160a01b031614610bcd57610191546040516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201859052909116906323b872dd906064015f604051808303815f87803b158015610bb6575f80fd5b505af1158015610bc8573d5f803e3d5ffd5b505050505b604080516001600160a01b03808716825285166020820152839183917fd33e100d324477d0c48d17ab70e096443fc9dd28775952e65f3806b7253467d1910160405180910390a3505060016065555050565b610c27611761565b610c3e5f805160206134e583398151915282611b96565b6040516001600160a01b038216907eabe768b82800e7d5614169467c9ce6a18df23b00ea0c3536791f7c6ff5c0d0905f90a250565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610cc5906060016040516020818303038152906040528051906020012090565b5492915050565b610cd4611761565b6108d05f611ba0565b610ce5611761565b6108d0611bf1565b5f91825261012d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610d236105266116ce565b610d3f576040516282b42960e81b815260040160405180910390fd5b610d47611832565b610d508161063d565b610d6d57604051633f030d6d60e01b815260040160405180910390fd5b5f5b5f828152610194602052604090206002015481101561099c575f828152610194602052604090206002018054610ddd919083908110610db057610db0612b37565b5f9182526020808320909101548583526101949091526040909120600101546001600160a01b0316611878565b600101610d6f565b610df06105266116ce565b610e0c576040516282b42960e81b815260040160405180910390fd5b610e14611832565b610e1d8261063d565b610e3a57604051633f030d6d60e01b815260040160405180910390fd5b6001600160a01b038116610e61576040516358ef870360e11b815260040160405180910390fd5b5f828152610194602090815260409182902060010180546001600160a01b0319166001600160a01b038516908117909155915191825283917ff92b34d7c01f8cf2b457fb33321c0392c514bf4b1f5edc9f78bfcedd16d4915e91015b60405180910390a25050565b5f610f12610ed685612b82565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611c2f92505050565b949350505050565b5f8281526101956020526040902054610f328161063d565b610f4f57604051633f030d6d60e01b815260040160405180910390fd5b610f576116ce565b5f82815261019460205260409020600101546001600160a01b03908116911614610f93576040516282b42960e81b815260040160405180910390fd5b610f9b611832565b811561100c57610191546040516376094f7560e11b81526001600160a01b039091169063ec129eea90610fda908a908a908a908a908a90600401612d06565b5f604051808303815f87803b158015610ff1575f80fd5b505af1158015611003573d5f803e3d5ffd5b50505050611073565b61019154604051636749599f60e11b81526001600160a01b039091169063ce92b33e90611045908a908a908a908a908a90600401612d06565b5f604051808303815f87803b15801561105c575f80fd5b505af115801561106e573d5f803e3d5ffd5b505050505b50505050505050565b5f6106375f805160206134e583398151915283610ced565b5f54610100900460ff16158080156110b257505f54600160ff909116105b806110cb5750303b1580156110cb57505f5460ff166001145b61112e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a9565b5f805460ff19166001179055801561114f575f805461ff0019166101001790555b611157611d6a565b61115f611d98565b611167611dc6565b61116f611df4565b611177611e22565b61117f611e58565b611187611e7e565b61019180546001600160a01b038087166001600160a01b0319928316179092556101938054868416908316179055610192805492851692909116919091179055801561120c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6002606554036112345760405162461bcd60e51b81526004016108a990612b4b565b60026065556112446105266116ce565b611260576040516282b42960e81b815260040160405180910390fd5b611268611832565b5f805f6112758885611eb5565b9250925092505f6112878484846119b2565b610192546040516339eb2ac960e21b81529192506001600160a01b03169063e7acab24906112c1908c908c908c908c903090600401613049565b6020604051808303815f875af11580156112dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611301919061321f565b50604080516001600160a01b03808716825285166020820152839183917fd33e100d324477d0c48d17ab70e096443fc9dd28775952e65f3806b7253467d1910160405180910390a35050600160655550505050505050565b6113646105266116ce565b611380576040516282b42960e81b815260040160405180910390fd5b611388611832565b6113918261063d565b6113ae57604051633f030d6d60e01b815260040160405180910390fd5b6001600160a01b0381166113d55760405163bab7ca3560e01b815260040160405180910390fd5b5f828152610194602090815260409182902080546001600160a01b0319166001600160a01b038516908117909155915191825283917fe3ece063b84a0e16e6080f268ec65ce9c2af3f48ad754f332a34c1eec29dcd939101610ebd565b5f8282604051602001611446929190613269565b60408051601f1981840301815291905280516020909101209392505050565b5f82815261012d602052604090206001015461148081611636565b61082883836116dc565b611492611761565b6001600160a01b0381166114f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a9565b61150081611ba0565b50565b61150b611761565b6115225f805160206134e583398151915282611465565b6040516001600160a01b038216907f7ec703108af80ed3dd35e047e5ca6c6d465aa7adab3855dfdb91686333ed584a905f90a250565b606061156385611fac565b5f80876001600160a01b03168661157c8b8a8989612011565b604051611589919061328d565b5f604051808303815f8787f1925050503d805f81146115c3576040519150601f19603f3d011682016040523d82523d5f602084013e6115c8565b606091505b5090925090506115d9603f876132bc565b5a116115e7576115e76132db565b61162782826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c4544000000000000815250612041565b925050505b9695505050505050565b611500816116426116ce565b61207a565b6116518282610ced565b6108bc575f82815261012d602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561168a6116ce565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f6116d76120de565b905090565b6116e68282610ced565b156108bc575f82815261012d602090815260408083206001600160a01b03851684529091529020805460ff1916905561171d6116ce565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6117696116ce565b6001600160a01b031661178460c9546001600160a01b031690565b6001600160a01b0316146108d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a9565b6117e26120f8565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118156116ce565b6040516001600160a01b03909116815260200160405180910390a1565b60975460ff16156108d05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108a9565b5f828152610195602052604080822080549290556101915490516331a9108f60e11b81526004810185905230916001600160a01b031690636352211e90602401602060405180830381865afa1580156118d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f79190612b1c565b6001600160a01b03160361082857610191546040516323b872dd60e01b81523060048201526001600160a01b03848116602483015260448201869052909116906323b872dd906064015f604051808303815f87803b158015611957575f80fd5b505af1158015611969573d5f803e3d5ffd5b50506040516001600160a01b03851681528592508391507f71f3f9a8aef7f77c5f9ddfd8c83f383ffa885f16dc7ab97046f9f70f4a4959e49060200160405180910390a3505050565b5f6001600160a01b0384166119da5760405163bab7ca3560e01b815260040160405180910390fd5b6001600160a01b038316611a01576040516358ef870360e11b815260040160405180910390fd5b611a0a8261073b565b15611a2857604051634517741560e01b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905082815f81518110611a5c57611a5c612b37565b60209081029190910101526040805160018082528183019092525f918160200160208202803683375050505f8581526101966020526040812054825192935091839190611aab57611aab612b37565b6020026020010181815250505f611ac28383611432565b604080516080810182526001600160a01b03808b16825289811660208084019182528385018981525f60608601819052878152610194835295909520845181549085166001600160a01b0319918216178255925160018201805491909516931692909217909255925180519495509193611b429260028501920190612597565b50606091909101516003909101805460ff19169115159190911790555f858152610195602090815260408083208490556101969091528120805491611b86836132ef565b9091555090979650505050505050565b6108bc8282611647565b60c980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b611bf9611832565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118156116ce565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015611c73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c979190613307565b90505f611d44866060015180519060200120868860200151604051602001611ce49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b905081866020015114801561162c5750855161162c906001600160a01b03168286612141565b5f54610100900460ff16611d905760405162461bcd60e51b81526004016108a99061331e565b6108d0611e58565b5f54610100900460ff16611dbe5760405162461bcd60e51b81526004016108a99061331e565b611d90611e58565b5f54610100900460ff16611dec5760405162461bcd60e51b81526004016108a99061331e565b6108d061227c565b5f54610100900460ff16611e1a5760405162461bcd60e51b81526004016108a99061331e565b6108d06122a9565b5f54610100900460ff16611e485760405162461bcd60e51b81526004016108a99061331e565b6108d0611e536116ce565b611ba0565b5f54610100900460ff166108d05760405162461bcd60e51b81526004016108a99061331e565b5f54610100900460ff16611ea45760405162461bcd60e51b81526004016108a99061331e565b6108d05f611eb06116ce565b611b96565b5f8080611ec28580613369565b611ed090604081019061337e565b9050600103611f8c5736611ee48680613369565b611ef290604081019061337e565b5f818110611f0257611f02612b37565b60a00291909101915060029050611f1c60208301836133c2565b6005811115611f2d57611f2d612d91565b148015611f5d5750610191546001600160a01b0316611f526040830160208401612798565b6001600160a01b0316145b15611f8a57611f6c8680613369565b611f7a906020810190612798565b9350849250604001359050611fa5565b505b60405163af61069360e01b815260040160405180910390fd5b9250925092565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506120008190565b5461200c9060016133db565b905550565b6060828585604051602001612028939291906133ee565b6040516020818303038152906040529050949350505050565b60608315612050575081610734565b8251156120605782518084602001fd5b8160405162461bcd60e51b81526004016108a99190612714565b6120848282610ced565b6108bc5761209c816001600160a01b031660146122db565b6120a78360206122db565b6040516020016120b892919061342c565b60408051601f198184030181529082905262461bcd60e51b82526108a991600401612714565b5f3033036120f3575060331936013560601c90565b503390565b60975460ff166108d05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108a9565b5f805f61214e8585612470565b90925090505f81600481111561216657612166612d91565b1480156121845750856001600160a01b0316826001600160a01b0316145b1561219457600192505050610734565b5f80876001600160a01b0316631626ba7e60e01b88886040516024016121bb9291906134a0565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516121f9919061328d565b5f60405180830381855afa9150503d805f8114612231576040519150601f19603f3d011682016040523d82523d5f602084013e612236565b606091505b5091509150818015612249575080516020145b801561227057508051630b135d3f60e11b9061226e9083016020908101908401613307565b145b98975050505050505050565b5f54610100900460ff166122a25760405162461bcd60e51b81526004016108a99061331e565b6001606555565b5f54610100900460ff166122cf5760405162461bcd60e51b81526004016108a99061331e565b6097805460ff19169055565b60605f6122e98360026134b8565b6122f49060026133db565b6001600160401b0381111561230b5761230b612993565b6040519080825280601f01601f191660200182016040528015612335576020820181803683370190505b509050600360fc1b815f8151811061234f5761234f612b37565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061237d5761237d612b37565b60200101906001600160f81b03191690815f1a9053505f61239f8460026134b8565b6123aa9060016133db565b90505b6001811115612421576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106123de576123de612b37565b1a60f81b8282815181106123f4576123f4612b37565b60200101906001600160f81b03191690815f1a90535060049490941c9361241a816134cf565b90506123ad565b5083156107345760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a9565b5f8082516041036124a4576020830151604084015160608501515f1a612498878285856124b2565b945094505050506124ab565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124e757505f9050600361258e565b8460ff16601b141580156124ff57508460ff16601c14155b1561250f57505f9050600461258e565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612560573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116612588575f6001925092505061258e565b91505f90505b94509492505050565b828054828255905f5260205f209081019282156125d0579160200282015b828111156125d05782518255916020019190600101906125b5565b506125dc9291506125e0565b5090565b5b808211156125dc575f81556001016125e1565b5f60208284031215612604575f80fd5b81356001600160e01b031981168114610734575f80fd5b5f6020828403121561262b575f80fd5b5035919050565b5f805f60408486031215612644575f80fd5b83356001600160401b038082111561265a575f80fd5b908501906080828803121561266d575f80fd5b90935060208501359080821115612682575f80fd5b818601915086601f830112612695575f80fd5b8135818111156126a3575f80fd5b8760208285010111156126b4575f80fd5b6020830194508093505050509250925092565b5f5b838110156126e15781810151838201526020016126c9565b50505f910152565b5f81518084526127008160208601602086016126c7565b601f01601f19169290920160200192915050565b602081525f61073460208301846126e9565b5f8060408385031215612737575f80fd5b50508035926020909101359150565b6001600160a01b0381168114611500575f80fd5b803561276581612746565b919050565b5f806040838503121561277b575f80fd5b82359150602083013561278d81612746565b809150509250929050565b5f602082840312156127a8575f80fd5b813561073481612746565b5f805f606084860312156127c5575f80fd5b83356127d081612746565b925060208401356127e081612746565b929592945050506040919091013590565b5f8083601f840112612801575f80fd5b5081356001600160401b03811115612817575f80fd5b6020830191508360208260051b85010111156124ab575f80fd5b8015158114611500575f80fd5b5f805f805f8060808789031215612853575f80fd5b86356001600160401b0380821115612869575f80fd5b6128758a838b016127f1565b9098509650602089013591508082111561288d575f80fd5b5061289a89828a016127f1565b9095509350506040870135915060608701356128b581612831565b809150509295509295509295565b5f805f606084860312156128d5575f80fd5b83356128e081612746565b925060208401356128f081612746565b9150604084013561290081612746565b809150509250925092565b5f805f805f6080868803121561291f575f80fd5b85356001600160401b0380821115612935575f80fd5b9087019060a0828a031215612948575f80fd5b9095506020870135908082111561295d575f80fd5b5061296a888289016127f1565b90955093505060408601359150606086013561298581612746565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156129c9576129c9612993565b60405290565b604051601f8201601f191681016001600160401b03811182821017156129f7576129f7612993565b604052919050565b5f82601f830112612a0e575f80fd5b813560206001600160401b03821115612a2957612a29612993565b8160051b612a388282016129cf565b9283528481018201928281019087851115612a51575f80fd5b83870192505b84831015612a7057823582529183019190830190612a57565b979650505050505050565b5f8060408385031215612a8c575f80fd5b82356001600160401b0380821115612aa2575f80fd5b612aae868387016129ff565b93506020850135915080821115612ac3575f80fd5b50612ad0858286016129ff565b9150509250929050565b5f808335601e19843603018112612aef575f80fd5b8301803591506001600160401b03821115612b08575f80fd5b6020019150368190038213156124ab575f80fd5b5f60208284031215612b2c575f80fd5b815161073481612746565b634e487b7160e01b5f52603260045260245ffd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f60808236031215612b92575f80fd5b612b9a6129a7565b8235612ba581612746565b8152602083810135818301526040808501359083015260608401356001600160401b0380821115612bd4575f80fd5b9085019036601f830112612be6575f80fd5b813581811115612bf857612bf8612993565b612c0a601f8201601f191685016129cf565b91508082523684828501011115612c1f575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e19843603018112612c7b575f80fd5b83016020810192503590506001600160401b03811115612c99575f80fd5b8036038213156124ab575f80fd5b5f838385526020808601955060208560051b830101845f5b87811015612cf957848303601f19018952612cda8288612c66565b612ce5858284612c3e565b9a86019a9450505090830190600101612cbf565b5090979650505050505050565b606081525f612d19606083018789612ca7565b8281036020840152612d2c818688612ca7565b9150508260408301529695505050505050565b5f808335601e19843603018112612d54575f80fd5b83016020810192503590506001600160401b03811115612d72575f80fd5b60a0810236038213156124ab575f80fd5b803560068110612765575f80fd5b634e487b7160e01b5f52602160045260245ffd5b60068110612db557612db5612d91565b9052565b8183525f60208085019450825f5b85811015612e2b57612de187612ddc84612d83565b612da5565b82820135612dee81612746565b6001600160a01b03168388015260408281013590880152606080830135908801526080808301359088015260a09687019690910190600101612dc7565b509495945050505050565b5f808335601e19843603018112612e4b575f80fd5b83016020810192503590506001600160401b03811115612e69575f80fd5b60c0810236038213156124ab575f80fd5b8183525f60208085019450825f5b85811015612e2b57612e9d87612ddc84612d83565b82820135612eaa81612746565b6001600160a01b039081168885015260408381013590890152606080840135908901526080808401359089015260a09083820135612ee781612746565b169088015260c0968701969190910190600101612e88565b803560058110612765575f80fd5b60058110612db557612db5612d91565b80356001600160781b0381168114612765575f80fd5b8183525f6001600160fb1b03831115612f4a575f80fd5b8260051b80836020870137939093016020019392505050565b8183526020808401935f91600585811b8301820185855b8881101561303b57858303601f19018a52813536899003609e19018112612f9f575f80fd5b88018035845260a08682013560028110612fb7575f80fd5b85880152604082810135908601526060808301359086015260808083013536849003601e19018112612fe7575f80fd5b9092018781019290356001600160401b03811115613003575f80fd5b80881b3603841315613013575f80fd5b82828801526130258388018286612f33565b9d89019d96505050928601925050600101612f7a565b509098975050505050505050565b608081525f610120873561015e19893603018112613065575f80fd5b60a06080850152880161308a82850161307d8361275a565b6001600160a01b03169052565b6130966020820161275a565b6101406130ad818701836001600160a01b03169052565b6130ba6040840184612d3f565b6101608881015292506130d261028088018483612db9565b9250506130e26060840184612e36565b87840361011f19016101808901526130fb848284612e7a565b9350505061310b60808401612eff565b6131196101a0880182612f0d565b5060a08301356101c087015260c08301356101e087015260e083013561020087015261010080840135610220880152848401356102408801528184013561026088015261316860208d01612f1d565b6001600160781b03811660a0890152945061318560408d01612f1d565b6001600160781b03811660c089015294506131a360608d018d612c66565b95509350607f199150818784030160e08801526131c1838686612c3e565b94506131d060808d018d612c66565b9450925081878603018188015250506131ea838383612c3e565b925050508281036020840152613201818789612f63565b91505083604083015261162c60608301846001600160a01b03169052565b5f6020828403121561322f575f80fd5b815161073481612831565b5f815180845260208085019450602084015f5b83811015612e2b5781518752958201959082019060010161324d565b604081525f61327b604083018561323a565b8281036020840152610730818561323a565b5f825161329e8184602087016126c7565b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b5f826132d657634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52600160045260245ffd5b5f60018201613300576133006132a8565b5060010190565b5f60208284031215613317575f80fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f823561015e1983360301811261329e575f80fd5b5f808335601e19843603018112613393575f80fd5b8301803591506001600160401b038211156133ac575f80fd5b602001915060a0810236038213156124ab575f80fd5b5f602082840312156133d2575f80fd5b61073482612d83565b80820180821115610637576106376132a8565b5f84516133ff8184602089016126c7565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516134638160178501602088016126c7565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516134948160288401602088016126c7565b01602801949350505050565b828152604060208201525f610f1260408301846126e9565b8082028115828204841417610637576106376132a8565b5f816134dd576134dd6132a8565b505f19019056fee42a2a81871991b348b461cd4ff9825352fd011597c5280ce35326126d53efbca164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
