{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC3525BaseMockUpgradeableWithInit",
  "sourceName": "contracts/mocks/ERC3525BaseMockUpgradeableWithInit.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        }
      ],
      "stateMutability": "payable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "ApprovalValue",
      "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": "metadataDescriptor",
          "type": "address"
        }
      ],
      "name": "SetMetadataDescriptor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_oldSlot",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_newSlot",
          "type": "uint256"
        }
      ],
      "name": "SlotChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_fromTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_toTokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "TransferValue",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "operator_",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "burnValue_",
          "type": "uint256"
        }
      ],
      "name": "burnValue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator_",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "metadataDescriptor",
      "outputs": [
        {
          "internalType": "contract IERC3525MetadataDescriptorUpgradeable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "mintTo_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slot_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "mintValue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data_",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator_",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved_",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "slotOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slot_",
          "type": "uint256"
        }
      ],
      "name": "slotURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index_",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index_",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fromTokenId_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newTokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fromTokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "toTokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "valueDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526040516200376138038062003761833981016040819052620000269162000343565b600054610100900460ff1615808015620000475750600054600160ff909116105b8062000077575062000064306200016260201b62000fb51760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b6200011184848462000171565b801562000158576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505062000522565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b60248201526000805160206200374183398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b620001da838383620001df565b505050565b600054610100900460ff166200023b5760405162461bcd60e51b815260206004820152602b60248201526000805160206200374183398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600160365560336200024e848262000456565b5060346200025d838262000456565b506035805460ff191660ff929092169190911790555050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200029e57600080fd5b81516001600160401b0380821115620002bb57620002bb62000276565b604051601f8301601f19908116603f01168101908282118183101715620002e657620002e662000276565b816040528381526020925086838588010111156200030357600080fd5b600091505b8382101562000327578582018301518183018401529082019062000308565b83821115620003395760008385830101525b9695505050505050565b6000806000606084860312156200035957600080fd5b83516001600160401b03808211156200037157600080fd5b6200037f878388016200028c565b945060208601519150808211156200039657600080fd5b50620003a5868287016200028c565b925050604084015160ff81168114620003bd57600080fd5b809150509250925092565b600181811c90821680620003dd57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001da57600081815260208120601f850160051c810160208610156200042d5750805b601f850160051c820191505b818110156200044e5782815560010162000439565b505050505050565b81516001600160401b0381111562000472576200047262000276565b6200048a81620004838454620003c8565b8462000404565b602080601f831160018114620004c25760008415620004a95750858301515b600019600386901b1c1916600185901b1785556200044e565b600085815260208120601f198616915b82811015620004f357888601518255948401946001909101908401620004d2565b5085821015620005125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61320f80620005326000396000f3fe6080604052600436106101cd5760003560e01c80636352211e116100f7578063a22cb46511610095578063e345e0bc11610064578063e345e0bc146104e2578063e8a3d48514610502578063e985e9c514610517578063f0e88e7f1461056457600080fd5b8063a22cb4651461046f578063a647e8ec1461048f578063b88d4fde146104af578063c87b56dd146104c257600080fd5b806387fe8611116100d157806387fe8611146104075780638cb0a5111461042757806395d89b411461043a5780639cc7f7081461044f57600080fd5b80636352211e146103a757806370a08231146103c7578063840f7113146103e757600080fd5b806323b872dd1161016f5780633e7e86691161013e5780633e7e86691461033257806342842e0e1461035457806342966c68146103675780634f6ccce71461038757600080fd5b806323b872dd146102cc578063263f3e7e146102df5780632f745c59146102ff578063310ed7f01461031f57600080fd5b8063095ea7b3116101ab578063095ea7b31461026157806309c3dd87146102765780630f485c021461029657806318160ddd146102b757600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612a25565b610584565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c610627565b6040516101fe9190612a9a565b34801561023557600080fd5b50610249610244366004612aad565b6106b9565b6040516001600160a01b0390911681526020016101fe565b61027461026f366004612add565b61070b565b005b34801561028257600080fd5b5061021c610291366004612aad565b6107ef565b6102a96102a4366004612b07565b6108e1565b6040519081526020016101fe565b3480156102c357600080fd5b506038546102a9565b6102746102da366004612b3c565b610919565b3480156102eb57600080fd5b506102a96102fa366004612aad565b61094b565b34801561030b57600080fd5b506102a961031a366004612add565b610993565b61027461032d366004612b68565b610a34565b34801561033e57600080fd5b5060355460405160ff90911681526020016101fe565b610274610362366004612b3c565b610a4a565b34801561037357600080fd5b50610274610382366004612aad565b610a65565b34801561039357600080fd5b506102a96103a2366004612aad565b610a96565b3480156103b357600080fd5b506102496103c2366004612aad565b610b27565b3480156103d357600080fd5b506102a96103e2366004612b94565b610bc3565b3480156103f357600080fd5b50603b54610249906001600160a01b031681565b34801561041357600080fd5b50610274610422366004612baf565b610c4b565b610274610435366004612b07565b610c80565b34801561044657600080fd5b5061021c610d3f565b34801561045b57600080fd5b506102a961046a366004612aad565b610d4e565b34801561047b57600080fd5b5061027461048a366004612bdf565b610d96565b34801561049b57600080fd5b506102746104aa366004612c16565b610da1565b6102746104bd366004612cbe565b610dad565b3480156104ce57600080fd5b5061021c6104dd366004612aad565b610dde565b3480156104ee57600080fd5b506102a96104fd366004612d69565b610e7d565b34801561050e57600080fd5b5061021c610eb1565b34801561052357600080fd5b506101f2610532366004612d95565b6001600160a01b039182166000908152603a602090815260408083209390941682526002909201909152205460ff1690565b34801561057057600080fd5b5061027461057f366004612baf565b610fab565b60006001600160e01b031982166301ffc9a760e01b14806105b557506001600160e01b03198216630354d60560e61b145b806105d057506001600160e01b031982166380ac58cd60e01b145b806105eb57506001600160e01b031982166370b0048160e11b145b8061060657506001600160e01b0319821663780e9d6360e01b145b8061062157506001600160e01b03198216635b5e139f60e01b145b92915050565b60606033805461063690612dbf565b80601f016020809104026020016040519081016040528092919081815260200182805461066290612dbf565b80156106af5780601f10610684576101008083540402835291602001916106af565b820191906000526020600020905b81548152906001019060200180831161069257829003601f168201915b5050505050905090565b60006106c482610fc4565b6000828152603960205260409020546038805490919081106106e8576106e8612df9565b60009182526020909120600460069092020101546001600160a01b031692915050565b600061071682610b27565b9050806001600160a01b0316836001600160a01b0316036107525760405162461bcd60e51b815260040161074990612e0f565b60405180910390fd5b336001600160a01b038216148061076e575061076e8133610532565b6107e05760405162461bcd60e51b815260206004820152603960248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610749565b6107ea8383611015565b505050565b6060600061080860408051602081019091526000815290565b603b549091506001600160a01b031661086857600081511161083957604051806020016040528060008152506108da565b80610843846110ac565b604051602001610854929190612e51565b6040516020818303038152906040526108da565b603b54604051633601bfc560e11b8152600481018590526001600160a01b0390911690636c037f8a906024015b600060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108da9190810190612e91565b9392505050565b60006108ee3385846111b5565b6108f784611245565b905061090e83826109078761094b565b600061124f565b6108da848284611379565b610924335b8261165f565b6109405760405162461bcd60e51b815260040161074990612f08565b6107ea8383836116e1565b600061095682610fc4565b60008281526039602052604090205460388054909190811061097a5761097a612df9565b9060005260206000209060060201600101549050919050565b600061099e83610bc3565b82106109f75760405162461bcd60e51b815260206004820152602260248201527f455243333532353a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610749565b6001600160a01b0383166000908152603a60205260409020805483908110610a2157610a21612df9565b9060005260206000200154905092915050565b610a3f3384836111b5565b6107ea838383611379565b6107ea83838360405180602001604052806000815250610dad565b610a6e3361091e565b610a8a5760405162461bcd60e51b815260040161074990612f5a565b610a9381611842565b50565b6000610aa160385490565b8210610afb5760405162461bcd60e51b815260206004820152602360248201527f455243333532353a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610749565b60388281548110610b0e57610b0e612df9565b9060005260206000209060060201600001549050919050565b6000610b3282610fc4565b600082815260396020526040902054603880549091908110610b5657610b56612df9565b60009182526020909120600360069092020101546001600160a01b0316905080610bbe5760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b6044820152606401610749565b919050565b60006001600160a01b038216610c2f5760405162461bcd60e51b815260206004820152602b60248201527f455243333532353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610749565b506001600160a01b03166000908152603a602052604090205490565b610c56335b8361165f565b610c725760405162461bcd60e51b815260040161074990612f5a565b610c7c8282611951565b5050565b6000610c8b84610b27565b9050806001600160a01b0316836001600160a01b031603610cbe5760405162461bcd60e51b815260040161074990612e0f565b610cc8338561165f565b610d2e5760405162461bcd60e51b815260206004820152603160248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b6064820152608401610749565b610d39848484611a4f565b50505050565b60606034805461063690612dbf565b6000610d5982610fc4565b600082815260396020526040902054603880549091908110610d7d57610d7d612df9565b9060005260206000209060060201600201549050919050565b610c7c338383611b87565b610d398484848461124f565b610db633610c50565b610dd25760405162461bcd60e51b815260040161074990612f08565b610d3984848484611c51565b6060610de982610fc4565b6000610e0060408051602081019091526000815290565b603b549091506001600160a01b0316610e4c576000815111610e3157604051806020016040528060008152506108da565b80610e3b846110ac565b604051602001610854929190612fa9565b603b546040516344a5a61760e11b8152600481018590526001600160a01b039091169063894b4c2e90602401610895565b6000610e8883610fc4565b5060009182526037602090815260408084206001600160a01b0393909316845291905290205490565b60606000610eca60408051602081019091526000815290565b603b549091506001600160a01b0316610f2a576000815111610efb5760405180602001604052806000815250610fa5565b80610f0530611cc4565b604051602001610f16929190612fd8565b604051602081830303815290604052610fa5565b603b60009054906101000a90046001600160a01b03166001600160a01b031663725fa09c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fa59190810190612e91565b91505090565b610c7c8282611cda565b6001600160a01b03163b151590565b610fcd81611cfe565b610a935760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b6044820152606401610749565b60008181526039602052604090205460388054849290811061103957611039612df9565b6000918252602090912060069091020160040180546001600160a01b0319166001600160a01b039283161790558190831661107382610b27565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060816000036110d35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156110fd57806110e781613032565b91506110f69050600a83613061565b91506110d7565b60008167ffffffffffffffff81111561111857611118612c4f565b6040519080825280601f01601f191660200182016040528015611142576020820181803683370190505b5090505b84156111ad57611157600183613075565b9150611164600a8661308c565b61116f9060306130a0565b60f81b81838151811061118457611184612df9565b60200101906001600160f81b031916908160001a9053506111a6600a86613061565b9450611146565b949350505050565b60006111c18385610e7d565b90506111cd848461165f565b1580156111dc57506000198114155b15610d3957818110156112315760405162461bcd60e51b815260206004820152601f60248201527f455243333532353a20696e73756666696369656e7420616c6c6f77616e6365006044820152606401610749565b610d3983856112408585613075565b611a4f565b6000610621611d4a565b6001600160a01b0384166112af5760405162461bcd60e51b815260206004820152602160248201527f455243333532353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610749565b826000036113095760405162461bcd60e51b815260206004820152602160248201527f455243333532353a2063616e6e6f74206d696e74207a65726f20746f6b656e496044820152601960fa1b6064820152608401610749565b61131283611cfe565b1561135f5760405162461bcd60e51b815260206004820152601d60248201527f455243333532353a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610749565b61136a848484611d64565b6113748382611e2a565b610d39565b61138283611cfe565b6113de5760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e736665722066726f6d20696e76616c696420746044820152661bdad95b88125160ca1b6064820152608401610749565b6113e782611cfe565b6114415760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20696e76616c696420746f6b604482015264195b88125160da1b6064820152608401610749565b60008381526039602052604081205460388054909190811061146557611465612df9565b906000526020600020906006020190506000603860396000868152602001908152602001600020548154811061149d5761149d612df9565b9060005260206000209060060201905082826002015410156115145760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610749565b80600101548260010154146115825760405162461bcd60e51b815260206004820152602e60248201527f455243333532353a207472616e7366657220746f20746f6b656e20776974682060448201526d191a5999995c995b9d081cdb1bdd60921b6064820152608401610749565b828260020160008282546115969190613075565b92505081905550828160020160008282546115b191906130a0565b9091555050604051838152849086906000805160206131ba8339815191529060200160405180910390a36115f685858560405180602001604052806000815250611e9d565b6116585760405162461bcd60e51b815260206004820152602d60248201527f455243333532353a207472616e736665722072656a656374656420627920455260448201526c21999a991aa932b1b2b4bb32b960991b6064820152608401610749565b5050505050565b60008061166b83610b27565b9050806001600160a01b0316846001600160a01b031614806116b657506001600160a01b038082166000908152603a60209081526040808320938816835260029093019052205460ff165b806111ad5750836001600160a01b03166116cf846106b9565b6001600160a01b031614949350505050565b826001600160a01b03166116f482610b27565b6001600160a01b0316146117565760405162461bcd60e51b8152602060048201526024808201527f455243333532353a207472616e736665722066726f6d20696e76616c6964206f6044820152633bb732b960e11b6064820152608401610749565b6001600160a01b0382166117ba5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610749565b60006117c58261094b565b905060006117d283610d4e565b90506117df600084611015565b6117e88361200d565b6117f285846120b8565b6117fc84846121d9565b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611658565b61184b81610fc4565b60008181526039602052604081205460388054909190811061186f5761186f612df9565b60009182526020909120600691909102016003810154600182015460028301549293506001600160a01b03909116916118a78561200d565b6118b183866120b8565b6118ba85612262565b6000856000805160206131ba833981519152836040516118dc91815260200190565b60405180910390a3600082867fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a460405185906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4611658565b61195a82610fc4565b60008281526039602052604081205460388054909190811061197e5761197e612df9565b600091825260209091206006909102016003810154600182015460028301549293506001600160a01b039091169184811015611a085760405162461bcd60e51b815260206004820152602360248201527f455243333532353a206275726e2076616c756520657863656564732062616c616044820152626e636560e81b6064820152608401610749565b84846002016000828254611a1c9190613075565b909155505060405185815260009087906000805160206131ba8339815191529060200160405180910390a3505050505050565b6001600160a01b038216611ab85760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20617070726f76652076616c756520746f20746865207a65604482015269726f206164647265737360b01b6064820152608401610749565b611ac28284612470565b611b2857600083815260396020526040902054603880549091908110611aea57611aea612df9565b60009182526020808320600692909202909101600501805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008381526037602090815260408083206001600160a01b038616808552908352928190208490555183815285917f621b050de0ad08b51d19b48b3e6df75348c4de6bdd93e81b252ca62e28265b1b91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b031603611be85760405162461bcd60e51b815260206004820152601a60248201527f455243333532353a20617070726f766520746f2063616c6c65720000000000006044820152606401610749565b6001600160a01b038381166000818152603a602090815260408083209487168084526002909501825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611b7a565b611c5c8484846116e1565b611c6884848484612543565b610d395760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e7366657220746f206e6f6e204552433732315260448201526632b1b2b4bb32b960c91b6064820152608401610749565b60606106216001600160a01b0383166014612689565b6000611ce583610b27565b90506000611cf28461094b565b90506113748484611e2a565b603854600090158015906106215750600082815260396020526040902054603880548492908110611d3157611d31612df9565b9060005260206000209060060201600001541492915050565b6036805460009182611d5b83613032565b91905055905090565b6040805160c081018252838152602080820184905260008284018190526001600160a01b038716606084015260808301819052835181815291820190935260a08201529050611db281612825565b611dbc84846121d9565b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816000847fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a450505050565b600082815260396020526040902054603880548392908110611e4e57611e4e612df9565b90600052602060002090600602016002016000828254611e6e91906130a0565b909155505060405181815282906000906000805160206131ba8339815191529060200160405180910390a35050565b600080611ea985610b27565b9050803b63ffffffff1615612003576040516301ffc9a760e01b8152629ce20b60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa925050508015611f1e575060408051601f3d908101601f19168201909252611f1b918101906130b8565b60015b611f5d573d808015611f4c576040519150601f19603f3d011682016040523d82523d6000602084013e611f51565b606091505b506001925050506111ad565b8015611ff857604051629ce20b60e01b81526000906001600160a01b03841690629ce20b90611f989033908c908c908c908c906004016130d5565b6020604051808303816000875af1158015611fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdb9190613113565b6001600160e01b031916629ce20b60e01b1493506111ad92505050565b6001925050506111ad565b60019150506111ad565b60008181526039602052604081205460388054909190811061203157612031612df9565b600091825260208220600560069092020190810154909250905b818110156120a957600083600501828154811061206a5761206a612df9565b60009182526020808320909101548783526037825260408084206001600160a01b039092168452915281205550806120a181613032565b91505061204b565b506107ea600583016000612977565b6000818152603960205260408120546038805490919081106120dc576120dc612df9565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b039485161790559184168152603a90915260408120805490919061212b90600190613075565b9050600082600001828154811061214457612144612df9565b9060005260206000200154905060008360010160008681526020019081526020016000205490508184600001828154811061218157612181612df9565b600091825260208083209091019290925583815260018601909152604080822083905586825281205583548490806121bb576121bb613130565b60019003818190600052602060002001600090559055505050505050565b6000818152603960205260409020546038805484929081106121fd576121fd612df9565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b03948516179055939091168152603a80845260408083208054858552600182810188529285208190559286529082018155825292902090910155565b60385460009061227490600190613075565b6000838152603960205260408120546038805493945090928490811061229c5761229c612df9565b60009182526020918290206040805160c08101825260069093029091018054835260018101548385015260028101548383015260038101546001600160a01b03908116606085015260048201541660808401526005810180548351818702810187019094528084529394919360a08601939283018282801561234757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612329575b5050505050815250509050806038838154811061236657612366612df9565b600091825260209182902083516006909202019081558282015160018201556040830151600282015560608301516003820180546001600160a01b039283166001600160a01b031991821617909155608085015160048401805491909316911617905560a0830151805191926123e492600585019290910190612995565b5050815160009081526039602052604080822085905586825281205550603880548061241257612412613130565b60008281526020812060066000199093019283020181815560018101829055600281018290556003810180546001600160a01b03199081169091556004820180549091169055906124666005830182612977565b5050905550505050565b60008181526039602052604081205460388054839290811061249457612494612df9565b6000918252602082206005600690920201015491505b8181101561253857600084815260396020526040902054603880546001600160a01b038816929081106124df576124df612df9565b9060005260206000209060060201600501828154811061250157612501612df9565b6000918252602090912001546001600160a01b03160361252657600192505050610621565b8061253081613032565b9150506124aa565b506000949350505050565b6000833b63ffffffff161561268157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612584903390899088908890600401613146565b6020604051808303816000875af19250505080156125bf575060408051601f3d908101601f191682019092526125bc91810190613113565b60015b612667573d8080156125ed576040519150601f19603f3d011682016040523d82523d6000602084013e6125f2565b606091505b50805160000361265f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610749565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111ad565b5060016111ad565b60606000612698836002613183565b6126a39060026130a0565b67ffffffffffffffff8111156126bb576126bb612c4f565b6040519080825280601f01601f1916602001820160405280156126e5576020820181803683370190505b509050600360fc1b8160008151811061270057612700612df9565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061272f5761272f612df9565b60200101906001600160f81b031916908160001a9053506000612753846002613183565b61275e9060016130a0565b90505b60018111156127d6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061279257612792612df9565b1a60f81b8282815181106127a8576127a8612df9565b60200101906001600160f81b031916908160001a90535060049490941c936127cf816131a2565b9050612761565b5083156108da5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610749565b603880548251600090815260396020908152604080832084905560018401855593909152835160069092027f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f4561998101928355818501517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619a820155928401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619b84015560608401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619c840180546001600160a01b039283166001600160a01b03199182161790915560808601517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619d8601805491909316911617905560a084015180518594610d39937f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619e909101920190612995565b5080546000825590600052602060002090810190610a9391906129fa565b8280548282559060005260206000209081019282156129ea579160200282015b828111156129ea57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129b5565b506129f69291506129fa565b5090565b5b808211156129f657600081556001016129fb565b6001600160e01b031981168114610a9357600080fd5b600060208284031215612a3757600080fd5b81356108da81612a0f565b60005b83811015612a5d578181015183820152602001612a45565b83811115610d395750506000910152565b60008151808452612a86816020860160208601612a42565b601f01601f19169290920160200192915050565b6020815260006108da6020830184612a6e565b600060208284031215612abf57600080fd5b5035919050565b80356001600160a01b0381168114610bbe57600080fd5b60008060408385031215612af057600080fd5b612af983612ac6565b946020939093013593505050565b600080600060608486031215612b1c57600080fd5b83359250612b2c60208501612ac6565b9150604084013590509250925092565b600080600060608486031215612b5157600080fd5b612b5a84612ac6565b9250612b2c60208501612ac6565b600080600060608486031215612b7d57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612ba657600080fd5b6108da82612ac6565b60008060408385031215612bc257600080fd5b50508035926020909101359150565b8015158114610a9357600080fd5b60008060408385031215612bf257600080fd5b612bfb83612ac6565b91506020830135612c0b81612bd1565b809150509250929050565b60008060008060808587031215612c2c57600080fd5b612c3585612ac6565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c8e57612c8e612c4f565b604052919050565b600067ffffffffffffffff821115612cb057612cb0612c4f565b50601f01601f191660200190565b60008060008060808587031215612cd457600080fd5b612cdd85612ac6565b9350612ceb60208601612ac6565b925060408501359150606085013567ffffffffffffffff811115612d0e57600080fd5b8501601f81018713612d1f57600080fd5b8035612d32612d2d82612c96565b612c65565b818152886020838501011115612d4757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215612d7c57600080fd5b82359150612d8c60208401612ac6565b90509250929050565b60008060408385031215612da857600080fd5b612db183612ac6565b9150612d8c60208401612ac6565b600181811c90821680612dd357607f821691505b602082108103612df357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f455243333532353a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60008351612e63818460208801612a42565b64736c6f742f60d81b9083019081528351612e85816005840160208801612a42565b01600501949350505050565b600060208284031215612ea357600080fd5b815167ffffffffffffffff811115612eba57600080fd5b8201601f81018413612ecb57600080fd5b8051612ed9612d2d82612c96565b818152856020838501011115612eee57600080fd5b612eff826020830160208601612a42565b95945050505050565b60208082526032908201527f455243333532353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602f908201527f455243333532353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60008351612fbb818460208801612a42565b835190830190612fcf818360208801612a42565b01949350505050565b60008351612fea818460208801612a42565b68636f6e74726163742f60b81b9083019081528351613010816009840160208801612a42565b01600901949350505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016130445761304461301c565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826130705761307061304b565b500490565b6000828210156130875761308761301c565b500390565b60008261309b5761309b61304b565b500690565b600082198211156130b3576130b361301c565b500190565b6000602082840312156130ca57600080fd5b81516108da81612bd1565b60018060a01b038616815284602082015283604082015282606082015260a06080820152600061310860a0830184612a6e565b979650505050505050565b60006020828403121561312557600080fd5b81516108da81612a0f565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061317990830184612a6e565b9695505050505050565b600081600019048311821515161561319d5761319d61301c565b500290565b6000816131b1576131b161301c565b50600019019056fe0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc6a264697066735822122041015a8c34788f1211043fe06b7a8e97207e705da05f8bf81e7277e4829962ec64736f6c634300080f0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
  "deployedBytecode": "0x6080604052600436106101cd5760003560e01c80636352211e116100f7578063a22cb46511610095578063e345e0bc11610064578063e345e0bc146104e2578063e8a3d48514610502578063e985e9c514610517578063f0e88e7f1461056457600080fd5b8063a22cb4651461046f578063a647e8ec1461048f578063b88d4fde146104af578063c87b56dd146104c257600080fd5b806387fe8611116100d157806387fe8611146104075780638cb0a5111461042757806395d89b411461043a5780639cc7f7081461044f57600080fd5b80636352211e146103a757806370a08231146103c7578063840f7113146103e757600080fd5b806323b872dd1161016f5780633e7e86691161013e5780633e7e86691461033257806342842e0e1461035457806342966c68146103675780634f6ccce71461038757600080fd5b806323b872dd146102cc578063263f3e7e146102df5780632f745c59146102ff578063310ed7f01461031f57600080fd5b8063095ea7b3116101ab578063095ea7b31461026157806309c3dd87146102765780630f485c021461029657806318160ddd146102b757600080fd5b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612a25565b610584565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c610627565b6040516101fe9190612a9a565b34801561023557600080fd5b50610249610244366004612aad565b6106b9565b6040516001600160a01b0390911681526020016101fe565b61027461026f366004612add565b61070b565b005b34801561028257600080fd5b5061021c610291366004612aad565b6107ef565b6102a96102a4366004612b07565b6108e1565b6040519081526020016101fe565b3480156102c357600080fd5b506038546102a9565b6102746102da366004612b3c565b610919565b3480156102eb57600080fd5b506102a96102fa366004612aad565b61094b565b34801561030b57600080fd5b506102a961031a366004612add565b610993565b61027461032d366004612b68565b610a34565b34801561033e57600080fd5b5060355460405160ff90911681526020016101fe565b610274610362366004612b3c565b610a4a565b34801561037357600080fd5b50610274610382366004612aad565b610a65565b34801561039357600080fd5b506102a96103a2366004612aad565b610a96565b3480156103b357600080fd5b506102496103c2366004612aad565b610b27565b3480156103d357600080fd5b506102a96103e2366004612b94565b610bc3565b3480156103f357600080fd5b50603b54610249906001600160a01b031681565b34801561041357600080fd5b50610274610422366004612baf565b610c4b565b610274610435366004612b07565b610c80565b34801561044657600080fd5b5061021c610d3f565b34801561045b57600080fd5b506102a961046a366004612aad565b610d4e565b34801561047b57600080fd5b5061027461048a366004612bdf565b610d96565b34801561049b57600080fd5b506102746104aa366004612c16565b610da1565b6102746104bd366004612cbe565b610dad565b3480156104ce57600080fd5b5061021c6104dd366004612aad565b610dde565b3480156104ee57600080fd5b506102a96104fd366004612d69565b610e7d565b34801561050e57600080fd5b5061021c610eb1565b34801561052357600080fd5b506101f2610532366004612d95565b6001600160a01b039182166000908152603a602090815260408083209390941682526002909201909152205460ff1690565b34801561057057600080fd5b5061027461057f366004612baf565b610fab565b60006001600160e01b031982166301ffc9a760e01b14806105b557506001600160e01b03198216630354d60560e61b145b806105d057506001600160e01b031982166380ac58cd60e01b145b806105eb57506001600160e01b031982166370b0048160e11b145b8061060657506001600160e01b0319821663780e9d6360e01b145b8061062157506001600160e01b03198216635b5e139f60e01b145b92915050565b60606033805461063690612dbf565b80601f016020809104026020016040519081016040528092919081815260200182805461066290612dbf565b80156106af5780601f10610684576101008083540402835291602001916106af565b820191906000526020600020905b81548152906001019060200180831161069257829003601f168201915b5050505050905090565b60006106c482610fc4565b6000828152603960205260409020546038805490919081106106e8576106e8612df9565b60009182526020909120600460069092020101546001600160a01b031692915050565b600061071682610b27565b9050806001600160a01b0316836001600160a01b0316036107525760405162461bcd60e51b815260040161074990612e0f565b60405180910390fd5b336001600160a01b038216148061076e575061076e8133610532565b6107e05760405162461bcd60e51b815260206004820152603960248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610749565b6107ea8383611015565b505050565b6060600061080860408051602081019091526000815290565b603b549091506001600160a01b031661086857600081511161083957604051806020016040528060008152506108da565b80610843846110ac565b604051602001610854929190612e51565b6040516020818303038152906040526108da565b603b54604051633601bfc560e11b8152600481018590526001600160a01b0390911690636c037f8a906024015b600060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108da9190810190612e91565b9392505050565b60006108ee3385846111b5565b6108f784611245565b905061090e83826109078761094b565b600061124f565b6108da848284611379565b610924335b8261165f565b6109405760405162461bcd60e51b815260040161074990612f08565b6107ea8383836116e1565b600061095682610fc4565b60008281526039602052604090205460388054909190811061097a5761097a612df9565b9060005260206000209060060201600101549050919050565b600061099e83610bc3565b82106109f75760405162461bcd60e51b815260206004820152602260248201527f455243333532353a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610749565b6001600160a01b0383166000908152603a60205260409020805483908110610a2157610a21612df9565b9060005260206000200154905092915050565b610a3f3384836111b5565b6107ea838383611379565b6107ea83838360405180602001604052806000815250610dad565b610a6e3361091e565b610a8a5760405162461bcd60e51b815260040161074990612f5a565b610a9381611842565b50565b6000610aa160385490565b8210610afb5760405162461bcd60e51b815260206004820152602360248201527f455243333532353a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610749565b60388281548110610b0e57610b0e612df9565b9060005260206000209060060201600001549050919050565b6000610b3282610fc4565b600082815260396020526040902054603880549091908110610b5657610b56612df9565b60009182526020909120600360069092020101546001600160a01b0316905080610bbe5760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b6044820152606401610749565b919050565b60006001600160a01b038216610c2f5760405162461bcd60e51b815260206004820152602b60248201527f455243333532353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610749565b506001600160a01b03166000908152603a602052604090205490565b610c56335b8361165f565b610c725760405162461bcd60e51b815260040161074990612f5a565b610c7c8282611951565b5050565b6000610c8b84610b27565b9050806001600160a01b0316836001600160a01b031603610cbe5760405162461bcd60e51b815260040161074990612e0f565b610cc8338561165f565b610d2e5760405162461bcd60e51b815260206004820152603160248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b6064820152608401610749565b610d39848484611a4f565b50505050565b60606034805461063690612dbf565b6000610d5982610fc4565b600082815260396020526040902054603880549091908110610d7d57610d7d612df9565b9060005260206000209060060201600201549050919050565b610c7c338383611b87565b610d398484848461124f565b610db633610c50565b610dd25760405162461bcd60e51b815260040161074990612f08565b610d3984848484611c51565b6060610de982610fc4565b6000610e0060408051602081019091526000815290565b603b549091506001600160a01b0316610e4c576000815111610e3157604051806020016040528060008152506108da565b80610e3b846110ac565b604051602001610854929190612fa9565b603b546040516344a5a61760e11b8152600481018590526001600160a01b039091169063894b4c2e90602401610895565b6000610e8883610fc4565b5060009182526037602090815260408084206001600160a01b0393909316845291905290205490565b60606000610eca60408051602081019091526000815290565b603b549091506001600160a01b0316610f2a576000815111610efb5760405180602001604052806000815250610fa5565b80610f0530611cc4565b604051602001610f16929190612fd8565b604051602081830303815290604052610fa5565b603b60009054906101000a90046001600160a01b03166001600160a01b031663725fa09c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fa59190810190612e91565b91505090565b610c7c8282611cda565b6001600160a01b03163b151590565b610fcd81611cfe565b610a935760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b6044820152606401610749565b60008181526039602052604090205460388054849290811061103957611039612df9565b6000918252602090912060069091020160040180546001600160a01b0319166001600160a01b039283161790558190831661107382610b27565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060816000036110d35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156110fd57806110e781613032565b91506110f69050600a83613061565b91506110d7565b60008167ffffffffffffffff81111561111857611118612c4f565b6040519080825280601f01601f191660200182016040528015611142576020820181803683370190505b5090505b84156111ad57611157600183613075565b9150611164600a8661308c565b61116f9060306130a0565b60f81b81838151811061118457611184612df9565b60200101906001600160f81b031916908160001a9053506111a6600a86613061565b9450611146565b949350505050565b60006111c18385610e7d565b90506111cd848461165f565b1580156111dc57506000198114155b15610d3957818110156112315760405162461bcd60e51b815260206004820152601f60248201527f455243333532353a20696e73756666696369656e7420616c6c6f77616e6365006044820152606401610749565b610d3983856112408585613075565b611a4f565b6000610621611d4a565b6001600160a01b0384166112af5760405162461bcd60e51b815260206004820152602160248201527f455243333532353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610749565b826000036113095760405162461bcd60e51b815260206004820152602160248201527f455243333532353a2063616e6e6f74206d696e74207a65726f20746f6b656e496044820152601960fa1b6064820152608401610749565b61131283611cfe565b1561135f5760405162461bcd60e51b815260206004820152601d60248201527f455243333532353a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610749565b61136a848484611d64565b6113748382611e2a565b610d39565b61138283611cfe565b6113de5760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e736665722066726f6d20696e76616c696420746044820152661bdad95b88125160ca1b6064820152608401610749565b6113e782611cfe565b6114415760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20696e76616c696420746f6b604482015264195b88125160da1b6064820152608401610749565b60008381526039602052604081205460388054909190811061146557611465612df9565b906000526020600020906006020190506000603860396000868152602001908152602001600020548154811061149d5761149d612df9565b9060005260206000209060060201905082826002015410156115145760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610749565b80600101548260010154146115825760405162461bcd60e51b815260206004820152602e60248201527f455243333532353a207472616e7366657220746f20746f6b656e20776974682060448201526d191a5999995c995b9d081cdb1bdd60921b6064820152608401610749565b828260020160008282546115969190613075565b92505081905550828160020160008282546115b191906130a0565b9091555050604051838152849086906000805160206131ba8339815191529060200160405180910390a36115f685858560405180602001604052806000815250611e9d565b6116585760405162461bcd60e51b815260206004820152602d60248201527f455243333532353a207472616e736665722072656a656374656420627920455260448201526c21999a991aa932b1b2b4bb32b960991b6064820152608401610749565b5050505050565b60008061166b83610b27565b9050806001600160a01b0316846001600160a01b031614806116b657506001600160a01b038082166000908152603a60209081526040808320938816835260029093019052205460ff165b806111ad5750836001600160a01b03166116cf846106b9565b6001600160a01b031614949350505050565b826001600160a01b03166116f482610b27565b6001600160a01b0316146117565760405162461bcd60e51b8152602060048201526024808201527f455243333532353a207472616e736665722066726f6d20696e76616c6964206f6044820152633bb732b960e11b6064820152608401610749565b6001600160a01b0382166117ba5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610749565b60006117c58261094b565b905060006117d283610d4e565b90506117df600084611015565b6117e88361200d565b6117f285846120b8565b6117fc84846121d9565b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611658565b61184b81610fc4565b60008181526039602052604081205460388054909190811061186f5761186f612df9565b60009182526020909120600691909102016003810154600182015460028301549293506001600160a01b03909116916118a78561200d565b6118b183866120b8565b6118ba85612262565b6000856000805160206131ba833981519152836040516118dc91815260200190565b60405180910390a3600082867fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a460405185906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4611658565b61195a82610fc4565b60008281526039602052604081205460388054909190811061197e5761197e612df9565b600091825260209091206006909102016003810154600182015460028301549293506001600160a01b039091169184811015611a085760405162461bcd60e51b815260206004820152602360248201527f455243333532353a206275726e2076616c756520657863656564732062616c616044820152626e636560e81b6064820152608401610749565b84846002016000828254611a1c9190613075565b909155505060405185815260009087906000805160206131ba8339815191529060200160405180910390a3505050505050565b6001600160a01b038216611ab85760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20617070726f76652076616c756520746f20746865207a65604482015269726f206164647265737360b01b6064820152608401610749565b611ac28284612470565b611b2857600083815260396020526040902054603880549091908110611aea57611aea612df9565b60009182526020808320600692909202909101600501805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008381526037602090815260408083206001600160a01b038616808552908352928190208490555183815285917f621b050de0ad08b51d19b48b3e6df75348c4de6bdd93e81b252ca62e28265b1b91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b031603611be85760405162461bcd60e51b815260206004820152601a60248201527f455243333532353a20617070726f766520746f2063616c6c65720000000000006044820152606401610749565b6001600160a01b038381166000818152603a602090815260408083209487168084526002909501825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611b7a565b611c5c8484846116e1565b611c6884848484612543565b610d395760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e7366657220746f206e6f6e204552433732315260448201526632b1b2b4bb32b960c91b6064820152608401610749565b60606106216001600160a01b0383166014612689565b6000611ce583610b27565b90506000611cf28461094b565b90506113748484611e2a565b603854600090158015906106215750600082815260396020526040902054603880548492908110611d3157611d31612df9565b9060005260206000209060060201600001541492915050565b6036805460009182611d5b83613032565b91905055905090565b6040805160c081018252838152602080820184905260008284018190526001600160a01b038716606084015260808301819052835181815291820190935260a08201529050611db281612825565b611dbc84846121d9565b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816000847fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a450505050565b600082815260396020526040902054603880548392908110611e4e57611e4e612df9565b90600052602060002090600602016002016000828254611e6e91906130a0565b909155505060405181815282906000906000805160206131ba8339815191529060200160405180910390a35050565b600080611ea985610b27565b9050803b63ffffffff1615612003576040516301ffc9a760e01b8152629ce20b60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa925050508015611f1e575060408051601f3d908101601f19168201909252611f1b918101906130b8565b60015b611f5d573d808015611f4c576040519150601f19603f3d011682016040523d82523d6000602084013e611f51565b606091505b506001925050506111ad565b8015611ff857604051629ce20b60e01b81526000906001600160a01b03841690629ce20b90611f989033908c908c908c908c906004016130d5565b6020604051808303816000875af1158015611fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdb9190613113565b6001600160e01b031916629ce20b60e01b1493506111ad92505050565b6001925050506111ad565b60019150506111ad565b60008181526039602052604081205460388054909190811061203157612031612df9565b600091825260208220600560069092020190810154909250905b818110156120a957600083600501828154811061206a5761206a612df9565b60009182526020808320909101548783526037825260408084206001600160a01b039092168452915281205550806120a181613032565b91505061204b565b506107ea600583016000612977565b6000818152603960205260408120546038805490919081106120dc576120dc612df9565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b039485161790559184168152603a90915260408120805490919061212b90600190613075565b9050600082600001828154811061214457612144612df9565b9060005260206000200154905060008360010160008681526020019081526020016000205490508184600001828154811061218157612181612df9565b600091825260208083209091019290925583815260018601909152604080822083905586825281205583548490806121bb576121bb613130565b60019003818190600052602060002001600090559055505050505050565b6000818152603960205260409020546038805484929081106121fd576121fd612df9565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b03948516179055939091168152603a80845260408083208054858552600182810188529285208190559286529082018155825292902090910155565b60385460009061227490600190613075565b6000838152603960205260408120546038805493945090928490811061229c5761229c612df9565b60009182526020918290206040805160c08101825260069093029091018054835260018101548385015260028101548383015260038101546001600160a01b03908116606085015260048201541660808401526005810180548351818702810187019094528084529394919360a08601939283018282801561234757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612329575b5050505050815250509050806038838154811061236657612366612df9565b600091825260209182902083516006909202019081558282015160018201556040830151600282015560608301516003820180546001600160a01b039283166001600160a01b031991821617909155608085015160048401805491909316911617905560a0830151805191926123e492600585019290910190612995565b5050815160009081526039602052604080822085905586825281205550603880548061241257612412613130565b60008281526020812060066000199093019283020181815560018101829055600281018290556003810180546001600160a01b03199081169091556004820180549091169055906124666005830182612977565b5050905550505050565b60008181526039602052604081205460388054839290811061249457612494612df9565b6000918252602082206005600690920201015491505b8181101561253857600084815260396020526040902054603880546001600160a01b038816929081106124df576124df612df9565b9060005260206000209060060201600501828154811061250157612501612df9565b6000918252602090912001546001600160a01b03160361252657600192505050610621565b8061253081613032565b9150506124aa565b506000949350505050565b6000833b63ffffffff161561268157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612584903390899088908890600401613146565b6020604051808303816000875af19250505080156125bf575060408051601f3d908101601f191682019092526125bc91810190613113565b60015b612667573d8080156125ed576040519150601f19603f3d011682016040523d82523d6000602084013e6125f2565b606091505b50805160000361265f5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610749565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111ad565b5060016111ad565b60606000612698836002613183565b6126a39060026130a0565b67ffffffffffffffff8111156126bb576126bb612c4f565b6040519080825280601f01601f1916602001820160405280156126e5576020820181803683370190505b509050600360fc1b8160008151811061270057612700612df9565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061272f5761272f612df9565b60200101906001600160f81b031916908160001a9053506000612753846002613183565b61275e9060016130a0565b90505b60018111156127d6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061279257612792612df9565b1a60f81b8282815181106127a8576127a8612df9565b60200101906001600160f81b031916908160001a90535060049490941c936127cf816131a2565b9050612761565b5083156108da5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610749565b603880548251600090815260396020908152604080832084905560018401855593909152835160069092027f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f4561998101928355818501517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619a820155928401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619b84015560608401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619c840180546001600160a01b039283166001600160a01b03199182161790915560808601517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619d8601805491909316911617905560a084015180518594610d39937f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619e909101920190612995565b5080546000825590600052602060002090810190610a9391906129fa565b8280548282559060005260206000209081019282156129ea579160200282015b828111156129ea57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129b5565b506129f69291506129fa565b5090565b5b808211156129f657600081556001016129fb565b6001600160e01b031981168114610a9357600080fd5b600060208284031215612a3757600080fd5b81356108da81612a0f565b60005b83811015612a5d578181015183820152602001612a45565b83811115610d395750506000910152565b60008151808452612a86816020860160208601612a42565b601f01601f19169290920160200192915050565b6020815260006108da6020830184612a6e565b600060208284031215612abf57600080fd5b5035919050565b80356001600160a01b0381168114610bbe57600080fd5b60008060408385031215612af057600080fd5b612af983612ac6565b946020939093013593505050565b600080600060608486031215612b1c57600080fd5b83359250612b2c60208501612ac6565b9150604084013590509250925092565b600080600060608486031215612b5157600080fd5b612b5a84612ac6565b9250612b2c60208501612ac6565b600080600060608486031215612b7d57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612ba657600080fd5b6108da82612ac6565b60008060408385031215612bc257600080fd5b50508035926020909101359150565b8015158114610a9357600080fd5b60008060408385031215612bf257600080fd5b612bfb83612ac6565b91506020830135612c0b81612bd1565b809150509250929050565b60008060008060808587031215612c2c57600080fd5b612c3585612ac6565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c8e57612c8e612c4f565b604052919050565b600067ffffffffffffffff821115612cb057612cb0612c4f565b50601f01601f191660200190565b60008060008060808587031215612cd457600080fd5b612cdd85612ac6565b9350612ceb60208601612ac6565b925060408501359150606085013567ffffffffffffffff811115612d0e57600080fd5b8501601f81018713612d1f57600080fd5b8035612d32612d2d82612c96565b612c65565b818152886020838501011115612d4757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215612d7c57600080fd5b82359150612d8c60208401612ac6565b90509250929050565b60008060408385031215612da857600080fd5b612db183612ac6565b9150612d8c60208401612ac6565b600181811c90821680612dd357607f821691505b602082108103612df357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f455243333532353a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60008351612e63818460208801612a42565b64736c6f742f60d81b9083019081528351612e85816005840160208801612a42565b01600501949350505050565b600060208284031215612ea357600080fd5b815167ffffffffffffffff811115612eba57600080fd5b8201601f81018413612ecb57600080fd5b8051612ed9612d2d82612c96565b818152856020838501011115612eee57600080fd5b612eff826020830160208601612a42565b95945050505050565b60208082526032908201527f455243333532353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602f908201527f455243333532353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60008351612fbb818460208801612a42565b835190830190612fcf818360208801612a42565b01949350505050565b60008351612fea818460208801612a42565b68636f6e74726163742f60b81b9083019081528351613010816009840160208801612a42565b01600901949350505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016130445761304461301c565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826130705761307061304b565b500490565b6000828210156130875761308761301c565b500390565b60008261309b5761309b61304b565b500690565b600082198211156130b3576130b361301c565b500190565b6000602082840312156130ca57600080fd5b81516108da81612bd1565b60018060a01b038616815284602082015283604082015282606082015260a06080820152600061310860a0830184612a6e565b979650505050505050565b60006020828403121561312557600080fd5b81516108da81612a0f565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061317990830184612a6e565b9695505050505050565b600081600019048311821515161561319d5761319d61301c565b500290565b6000816131b1576131b161301c565b50600019019056fe0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc6a264697066735822122041015a8c34788f1211043fe06b7a8e97207e705da05f8bf81e7277e4829962ec64736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
