{
  "_format": "hh-sol-artifact-1",
  "contractName": "ListingStrategyRegistry",
  "sourceName": "contracts/listing/listing-strategy-registry/ListingStrategyRegistry.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidContractEntityInterface",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidListingControllerInterface",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "ListingStrategyIsAlreadyRegistered",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "provided",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "required",
          "type": "bytes4"
        }
      ],
      "name": "ListingStrategyMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "UnregisteredListingStrategy",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "UnsupportedListingStrategy",
      "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": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newController",
          "type": "address"
        }
      ],
      "name": "ListingStrategyControllerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "bytes4",
          "name": "listingTaxStrategyId",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "ListingStrategyRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "checkRegisteredListingStrategy",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractKey",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IACL",
              "name": "acl",
              "type": "address"
            },
            {
              "internalType": "contract IMetahub",
              "name": "metahub",
              "type": "address"
            }
          ],
          "internalType": "struct ListingStrategyRegistry.ListingStrategyRegistryInitParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "isRegisteredListingStrategy",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "listingController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "listingStrategy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "controller",
              "type": "address"
            },
            {
              "internalType": "bytes4",
              "name": "taxStrategyId",
              "type": "bytes4"
            }
          ],
          "internalType": "struct IListingStrategyRegistry.ListingStrategyConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "listingTaxController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        }
      ],
      "name": "listingTaxId",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "controller",
              "type": "address"
            },
            {
              "internalType": "bytes4",
              "name": "taxStrategyId",
              "type": "bytes4"
            }
          ],
          "internalType": "struct IListingStrategyRegistry.ListingStrategyConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "registerListingStrategy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "listingStrategyId",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "setListingController",
      "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": "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"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b50600054610100900460ff1615808015620000375750600054600160ff909116105b8062000067575062000054306200014160201b62000dee1760201c565b15801562000067575060005460ff166001145b620000cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000f3576000805461ff0019166101001790555b80156200013a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5062000150565b6001600160a01b03163b151590565b608051611af662000188600039600081816103a9015281816103f2015281816105c701528181610607015261069a0152611af66000f3fe6080604052600436106100e85760003560e01c8063ac9650d81161008a578063c9c1478211610059578063c9c14782146102ad578063d6324606146102cd578063e30d2ef4146102ed578063ec21896d1461031a57600080fd5b8063ac9650d814610220578063b6a597dd1461024d578063c8f249cc1461026d578063c94d3be61461028d57600080fd5b80633e3bc748116100c65780633e3bc748146101645780634f1ef2861461019c57806352d1902d146101af57806352d9a2c9146101d257600080fd5b806301ffc9a7146100ed5780631582016d146101225780633659cfe614610142575b600080fd5b3480156100f957600080fd5b5061010d610108366004611522565b61034d565b60405190151581526020015b60405180910390f35b34801561012e57600080fd5b5061010d61013d366004611522565b610378565b34801561014e57600080fd5b5061016261015d366004611554565b61039f565b005b34801561017057600080fd5b5061018461017f366004611522565b610487565b6040516001600160a01b039091168152602001610119565b6101626101aa366004611587565b6105bd565b3480156101bb57600080fd5b506101c461068d565b604051908152602001610119565b3480156101de57600080fd5b506101f26101ed366004611522565b610740565b6040805182516001600160a01b031681526020928301516001600160e01b0319169281019290925201610119565b34801561022c57600080fd5b5061024061023b36600461164b565b6107aa565b6040516101199190611718565b34801561025957600080fd5b50610162610268366004611792565b61089f565b34801561027957600080fd5b506101626102883660046117ae565b610a0d565b34801561029957600080fd5b506101626102a8366004611522565b610b1d565b3480156102b957600080fd5b506101626102c83660046117e7565b610b45565b3480156102d957600080fd5b506101846102e8366004611522565b610d87565b3480156102f957600080fd5b5061030d610308366004611522565b610dba565b604051610119919061181d565b34801561032657600080fd5b507f73e1d9db10828306484a2c49de42bbee9bb56a992930a35dacbbd5880c5099f161030d565b60006001600160e01b031982166342109cdb60e11b1480610372575061037282610dfd565b92915050565b6001600160e01b0319166000908152609960205260409020546001600160a01b0316151590565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103f05760405162461bcd60e51b81526004016103e790611832565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610439600080516020611a7a833981519152546001600160a01b031690565b6001600160a01b03161461045f5760405162461bcd60e51b81526004016103e79061187e565b61046881610e32565b6040805160008082526020820190925261048491839190610eaf565b50565b60008161049381610b1d565b6001600160e01b031983166000908152609960205260409081902054606554915163e3dedd6b60e01b8152600160a01b90910460e01b916001600160a01b03169063e3dedd6b90610508907fcb8b0edfb41135e2c66c5965751ea9ec236740b992c4aa9d2fcb085a3ecb10bf9060040161181d565b602060405180830381865afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054991906118ca565b6001600160a01b031663f842cc3c826040518263ffffffff1660e01b8152600401610574919061181d565b602060405180830381865afa158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b591906118ca565b949350505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106055760405162461bcd60e51b81526004016103e790611832565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661064e600080516020611a7a833981519152546001600160a01b031690565b6001600160a01b0316146106745760405162461bcd60e51b81526004016103e79061187e565b61067d82610e32565b61068982826001610eaf565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461072d5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016103e7565b50600080516020611a7a83398151915290565b60408051808201909152600080825260208201528161075e81610b1d565b50506001600160e01b03199081166000908152609960209081526040918290208251808401909352546001600160a01b0381168352600160a01b900460e01b9092169181019190915290565b60608167ffffffffffffffff8111156107c5576107c5611571565b6040519080825280602002602001820160405280156107f857816020015b60608152602001906001900390816107e35790505b50905060005b82811015610898576108683085858481811061081c5761081c6118e7565b905060200281019061082e91906118fd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061101f92505050565b82828151811061087a5761087a6118e7565b602002602001018190525080806108909061194b565b9150506107fe565b5092915050565b600054610100900460ff16158080156108bf5750600054600160ff909116105b806108d95750303b1580156108d9575060005460ff166001145b61093c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103e7565b6000805460ff19166001179055801561095f576000805461ff0019166101001790555b61096761104b565b6109746020830183611554565b609880546001600160a01b0319166001600160a01b03929092169190911790556109a46040830160208401611554565b606580546001600160a01b0319166001600160a01b03929092169190911790558015610689576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6098546001600160a01b03166001600160a01b03166312d9a6ad7f060c8eced3c6b422fe5573c862b67b9f6e25a3fc7d9543b14f7aee77b138e70d336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610a8e57600080fd5b505afa158015610aa2573d6000803e3d6000fd5b5050505081610ab081610b1d565b610aba83836110b8565b6001600160e01b0319831660008181526099602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f809a4d189cd54182a3cd3512e88f54fcbc7a8e56c4ebdd67d37e5985a521e70591a3505050565b610b2681610378565b6104845780604051631e34d40b60e01b81526004016103e7919061181d565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610ba757600080fd5b505afa158015610bbb573d6000803e3d6000fd5b505060655460405163e3dedd6b60e01b81526001600160a01b03909116925063e3dedd6b9150610c0f907fcb8b0edfb41135e2c66c5965751ea9ec236740b992c4aa9d2fcb085a3ecb10bf9060040161181d565b602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118ca565b6001600160a01b0316631d5ae17b610c6e6040840160208501611522565b6040518263ffffffff1660e01b8152600401610c8a919061181d565b60006040518083038186803b158015610ca257600080fd5b505afa158015610cb6573d6000803e3d6000fd5b50610cd39250849150610cce90506020840184611554565b6110b8565b610cdc82610378565b15610cfc57816040516301dfbfcd60e11b81526004016103e7919061181d565b6001600160e01b0319821660009081526099602052604090208190610d218282611972565b50610d3190506020820182611554565b6001600160a01b0316610d4a6040830160208401611522565b6040516001600160e01b0319918216918516907f458c8016f5f129ecabc2f9ad23e1f6c42f4922d0ae76c897d4f4b336e560e19490600090a45050565b600081610d9381610b1d565b50506001600160e01b0319166000908152609960205260409020546001600160a01b031690565b600081610dc681610b1d565b50506001600160e01b031916600090815260996020526040902054600160a01b900460e01b90565b6001600160a01b03163b151590565b60006001600160e01b0319821663ec21896d60e01b148061037257506301ffc9a760e01b6001600160e01b0319831614610372565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610e9457600080fd5b505afa158015610ea8573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ee757610ee283611196565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f41575060408051601f3d908101601f19168201909252610f3e918101906119ce565b60015b610fa45760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016103e7565b600080516020611a7a83398151915281146110135760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016103e7565b50610ee2838383611232565b60606110448383604051806060016040528060278152602001611a9a6027913961125d565b9392505050565b600054610100900460ff166110b65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103e7565b565b6110d26001600160a01b03821663bacbb19b60e01b6112fb565b6110ef57604051637a0825c160e11b815260040160405180910390fd5b6000816001600160a01b031663492f4e186040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115391906119e7565b90506001600160e01b031980821690841614610ee25760405163dc5b665760e01b81526001600160e01b03198083166004830152841660248201526044016103e7565b6001600160a01b0381163b6112035760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103e7565b600080516020611a7a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61123b83611317565b6000825111806112485750805b15610ee2576112578383611357565b50505050565b60606001600160a01b0384163b6112865760405162461bcd60e51b81526004016103e790611a04565b600080856001600160a01b0316856040516112a19190611a4a565b600060405180830381855af49150503d80600081146112dc576040519150601f19603f3d011682016040523d82523d6000602084013e6112e1565b606091505b50915091506112f182828661140c565b9695505050505050565b600061130683611445565b801561104457506110448383611478565b61132081611196565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6113805760405162461bcd60e51b81526004016103e790611a04565b600080846001600160a01b03168460405161139b9190611a4a565b600060405180830381855af49150503d80600081146113d6576040519150601f19603f3d011682016040523d82523d6000602084013e6113db565b606091505b50915091506114038282604051806060016040528060278152602001611a9a6027913961140c565b95945050505050565b6060831561141b575081611044565b82511561142b5782518084602001fd5b8160405162461bcd60e51b81526004016103e79190611a66565b6000611458826301ffc9a760e01b611478565b80156103725750611471826001600160e01b0319611478565b1592915050565b6000806301ffc9a760e01b83604051602401611494919061181d565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156114f5575060208210155b80156115015750600081115b979650505050505050565b6001600160e01b03198116811461048457600080fd5b60006020828403121561153457600080fd5b81356110448161150c565b6001600160a01b038116811461048457600080fd5b60006020828403121561156657600080fd5b81356110448161153f565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561159a57600080fd5b82356115a58161153f565b9150602083013567ffffffffffffffff808211156115c257600080fd5b818501915085601f8301126115d657600080fd5b8135818111156115e8576115e8611571565b604051601f8201601f19908116603f0116810190838211818310171561161057611610611571565b8160405282815288602084870101111561162957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806020838503121561165e57600080fd5b823567ffffffffffffffff8082111561167657600080fd5b818501915085601f83011261168a57600080fd5b81358181111561169957600080fd5b8660208260051b85010111156116ae57600080fd5b60209290920196919550909350505050565b60005b838110156116db5781810151838201526020016116c3565b838111156112575750506000910152565b600081518084526117048160208601602086016116c0565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561176d57603f1988860301845261175b8583516116ec565b9450928501929085019060010161173f565b5092979650505050505050565b60006040828403121561178c57600080fd5b50919050565b6000604082840312156117a457600080fd5b611044838361177a565b600080604083850312156117c157600080fd5b82356117cc8161150c565b915060208301356117dc8161153f565b809150509250929050565b600080606083850312156117fa57600080fd5b82356118058161150c565b9150611814846020850161177a565b90509250929050565b6001600160e01b031991909116815260200190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156118dc57600080fd5b81516110448161153f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261191457600080fd5b83018035915067ffffffffffffffff82111561192f57600080fd5b60200191503681900382131561194457600080fd5b9250929050565b60006001820161196b57634e487b7160e01b600052601160045260246000fd5b5060010190565b813561197d8161153f565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356119a98161150c565b6001600160c01b03199190911690911760409190911c63ffffffff60a01b1617905550565b6000602082840312156119e057600080fd5b5051919050565b6000602082840312156119f957600080fd5b81516110448161150c565b60208082526026908201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6040820152651b9d1c9858dd60d21b606082015260800190565b60008251611a5c8184602087016116c0565b9190910192915050565b60208152600061104460208301846116ec56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207b573110a0586c6c664048d1d3fcc6a6bc628398f213cb56f0d3a8ad6b7554f164736f6c634300080d0033",
  "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063ac9650d81161008a578063c9c1478211610059578063c9c14782146102ad578063d6324606146102cd578063e30d2ef4146102ed578063ec21896d1461031a57600080fd5b8063ac9650d814610220578063b6a597dd1461024d578063c8f249cc1461026d578063c94d3be61461028d57600080fd5b80633e3bc748116100c65780633e3bc748146101645780634f1ef2861461019c57806352d1902d146101af57806352d9a2c9146101d257600080fd5b806301ffc9a7146100ed5780631582016d146101225780633659cfe614610142575b600080fd5b3480156100f957600080fd5b5061010d610108366004611522565b61034d565b60405190151581526020015b60405180910390f35b34801561012e57600080fd5b5061010d61013d366004611522565b610378565b34801561014e57600080fd5b5061016261015d366004611554565b61039f565b005b34801561017057600080fd5b5061018461017f366004611522565b610487565b6040516001600160a01b039091168152602001610119565b6101626101aa366004611587565b6105bd565b3480156101bb57600080fd5b506101c461068d565b604051908152602001610119565b3480156101de57600080fd5b506101f26101ed366004611522565b610740565b6040805182516001600160a01b031681526020928301516001600160e01b0319169281019290925201610119565b34801561022c57600080fd5b5061024061023b36600461164b565b6107aa565b6040516101199190611718565b34801561025957600080fd5b50610162610268366004611792565b61089f565b34801561027957600080fd5b506101626102883660046117ae565b610a0d565b34801561029957600080fd5b506101626102a8366004611522565b610b1d565b3480156102b957600080fd5b506101626102c83660046117e7565b610b45565b3480156102d957600080fd5b506101846102e8366004611522565b610d87565b3480156102f957600080fd5b5061030d610308366004611522565b610dba565b604051610119919061181d565b34801561032657600080fd5b507f73e1d9db10828306484a2c49de42bbee9bb56a992930a35dacbbd5880c5099f161030d565b60006001600160e01b031982166342109cdb60e11b1480610372575061037282610dfd565b92915050565b6001600160e01b0319166000908152609960205260409020546001600160a01b0316151590565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103f05760405162461bcd60e51b81526004016103e790611832565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610439600080516020611a7a833981519152546001600160a01b031690565b6001600160a01b03161461045f5760405162461bcd60e51b81526004016103e79061187e565b61046881610e32565b6040805160008082526020820190925261048491839190610eaf565b50565b60008161049381610b1d565b6001600160e01b031983166000908152609960205260409081902054606554915163e3dedd6b60e01b8152600160a01b90910460e01b916001600160a01b03169063e3dedd6b90610508907fcb8b0edfb41135e2c66c5965751ea9ec236740b992c4aa9d2fcb085a3ecb10bf9060040161181d565b602060405180830381865afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054991906118ca565b6001600160a01b031663f842cc3c826040518263ffffffff1660e01b8152600401610574919061181d565b602060405180830381865afa158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b591906118ca565b949350505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106055760405162461bcd60e51b81526004016103e790611832565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661064e600080516020611a7a833981519152546001600160a01b031690565b6001600160a01b0316146106745760405162461bcd60e51b81526004016103e79061187e565b61067d82610e32565b61068982826001610eaf565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461072d5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016103e7565b50600080516020611a7a83398151915290565b60408051808201909152600080825260208201528161075e81610b1d565b50506001600160e01b03199081166000908152609960209081526040918290208251808401909352546001600160a01b0381168352600160a01b900460e01b9092169181019190915290565b60608167ffffffffffffffff8111156107c5576107c5611571565b6040519080825280602002602001820160405280156107f857816020015b60608152602001906001900390816107e35790505b50905060005b82811015610898576108683085858481811061081c5761081c6118e7565b905060200281019061082e91906118fd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061101f92505050565b82828151811061087a5761087a6118e7565b602002602001018190525080806108909061194b565b9150506107fe565b5092915050565b600054610100900460ff16158080156108bf5750600054600160ff909116105b806108d95750303b1580156108d9575060005460ff166001145b61093c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103e7565b6000805460ff19166001179055801561095f576000805461ff0019166101001790555b61096761104b565b6109746020830183611554565b609880546001600160a01b0319166001600160a01b03929092169190911790556109a46040830160208401611554565b606580546001600160a01b0319166001600160a01b03929092169190911790558015610689576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6098546001600160a01b03166001600160a01b03166312d9a6ad7f060c8eced3c6b422fe5573c862b67b9f6e25a3fc7d9543b14f7aee77b138e70d336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610a8e57600080fd5b505afa158015610aa2573d6000803e3d6000fd5b5050505081610ab081610b1d565b610aba83836110b8565b6001600160e01b0319831660008181526099602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f809a4d189cd54182a3cd3512e88f54fcbc7a8e56c4ebdd67d37e5985a521e70591a3505050565b610b2681610378565b6104845780604051631e34d40b60e01b81526004016103e7919061181d565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610ba757600080fd5b505afa158015610bbb573d6000803e3d6000fd5b505060655460405163e3dedd6b60e01b81526001600160a01b03909116925063e3dedd6b9150610c0f907fcb8b0edfb41135e2c66c5965751ea9ec236740b992c4aa9d2fcb085a3ecb10bf9060040161181d565b602060405180830381865afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118ca565b6001600160a01b0316631d5ae17b610c6e6040840160208501611522565b6040518263ffffffff1660e01b8152600401610c8a919061181d565b60006040518083038186803b158015610ca257600080fd5b505afa158015610cb6573d6000803e3d6000fd5b50610cd39250849150610cce90506020840184611554565b6110b8565b610cdc82610378565b15610cfc57816040516301dfbfcd60e11b81526004016103e7919061181d565b6001600160e01b0319821660009081526099602052604090208190610d218282611972565b50610d3190506020820182611554565b6001600160a01b0316610d4a6040830160208401611522565b6040516001600160e01b0319918216918516907f458c8016f5f129ecabc2f9ad23e1f6c42f4922d0ae76c897d4f4b336e560e19490600090a45050565b600081610d9381610b1d565b50506001600160e01b0319166000908152609960205260409020546001600160a01b031690565b600081610dc681610b1d565b50506001600160e01b031916600090815260996020526040902054600160a01b900460e01b90565b6001600160a01b03163b151590565b60006001600160e01b0319821663ec21896d60e01b148061037257506301ffc9a760e01b6001600160e01b0319831614610372565b6098546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015610e9457600080fd5b505afa158015610ea8573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ee757610ee283611196565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f41575060408051601f3d908101601f19168201909252610f3e918101906119ce565b60015b610fa45760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016103e7565b600080516020611a7a83398151915281146110135760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016103e7565b50610ee2838383611232565b60606110448383604051806060016040528060278152602001611a9a6027913961125d565b9392505050565b600054610100900460ff166110b65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103e7565b565b6110d26001600160a01b03821663bacbb19b60e01b6112fb565b6110ef57604051637a0825c160e11b815260040160405180910390fd5b6000816001600160a01b031663492f4e186040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115391906119e7565b90506001600160e01b031980821690841614610ee25760405163dc5b665760e01b81526001600160e01b03198083166004830152841660248201526044016103e7565b6001600160a01b0381163b6112035760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016103e7565b600080516020611a7a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61123b83611317565b6000825111806112485750805b15610ee2576112578383611357565b50505050565b60606001600160a01b0384163b6112865760405162461bcd60e51b81526004016103e790611a04565b600080856001600160a01b0316856040516112a19190611a4a565b600060405180830381855af49150503d80600081146112dc576040519150601f19603f3d011682016040523d82523d6000602084013e6112e1565b606091505b50915091506112f182828661140c565b9695505050505050565b600061130683611445565b801561104457506110448383611478565b61132081611196565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6113805760405162461bcd60e51b81526004016103e790611a04565b600080846001600160a01b03168460405161139b9190611a4a565b600060405180830381855af49150503d80600081146113d6576040519150601f19603f3d011682016040523d82523d6000602084013e6113db565b606091505b50915091506114038282604051806060016040528060278152602001611a9a6027913961140c565b95945050505050565b6060831561141b575081611044565b82511561142b5782518084602001fd5b8160405162461bcd60e51b81526004016103e79190611a66565b6000611458826301ffc9a760e01b611478565b80156103725750611471826001600160e01b0319611478565b1592915050565b6000806301ffc9a760e01b83604051602401611494919061181d565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156114f5575060208210155b80156115015750600081115b979650505050505050565b6001600160e01b03198116811461048457600080fd5b60006020828403121561153457600080fd5b81356110448161150c565b6001600160a01b038116811461048457600080fd5b60006020828403121561156657600080fd5b81356110448161153f565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561159a57600080fd5b82356115a58161153f565b9150602083013567ffffffffffffffff808211156115c257600080fd5b818501915085601f8301126115d657600080fd5b8135818111156115e8576115e8611571565b604051601f8201601f19908116603f0116810190838211818310171561161057611610611571565b8160405282815288602084870101111561162957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806020838503121561165e57600080fd5b823567ffffffffffffffff8082111561167657600080fd5b818501915085601f83011261168a57600080fd5b81358181111561169957600080fd5b8660208260051b85010111156116ae57600080fd5b60209290920196919550909350505050565b60005b838110156116db5781810151838201526020016116c3565b838111156112575750506000910152565b600081518084526117048160208601602086016116c0565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561176d57603f1988860301845261175b8583516116ec565b9450928501929085019060010161173f565b5092979650505050505050565b60006040828403121561178c57600080fd5b50919050565b6000604082840312156117a457600080fd5b611044838361177a565b600080604083850312156117c157600080fd5b82356117cc8161150c565b915060208301356117dc8161153f565b809150509250929050565b600080606083850312156117fa57600080fd5b82356118058161150c565b9150611814846020850161177a565b90509250929050565b6001600160e01b031991909116815260200190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000602082840312156118dc57600080fd5b81516110448161153f565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261191457600080fd5b83018035915067ffffffffffffffff82111561192f57600080fd5b60200191503681900382131561194457600080fd5b9250929050565b60006001820161196b57634e487b7160e01b600052601160045260246000fd5b5060010190565b813561197d8161153f565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356119a98161150c565b6001600160c01b03199190911690911760409190911c63ffffffff60a01b1617905550565b6000602082840312156119e057600080fd5b5051919050565b6000602082840312156119f957600080fd5b81516110448161150c565b60208082526026908201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6040820152651b9d1c9858dd60d21b606082015260800190565b60008251611a5c8184602087016116c0565b9190910192915050565b60208152600061104460208301846116ec56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207b573110a0586c6c664048d1d3fcc6a6bc628398f213cb56f0d3a8ad6b7554f164736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
