{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC3525",
  "sourceName": "contracts/ERC3525.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "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": 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": [],
      "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 IERC3525MetadataDescriptor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "0x60806040523480156200001157600080fd5b5060405162002f0838038062002f08833981016040819052620000349162000141565b6001600355600062000047848262000255565b50600162000056838262000255565b506002805460ff191660ff9290921691909117905550620003219050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200009c57600080fd5b81516001600160401b0380821115620000b957620000b962000074565b604051601f8301601f19908116603f01168101908282118183101715620000e457620000e462000074565b816040528381526020925086838588010111156200010157600080fd5b600091505b8382101562000125578582018301518183018401529082019062000106565b83821115620001375760008385830101525b9695505050505050565b6000806000606084860312156200015757600080fd5b83516001600160401b03808211156200016f57600080fd5b6200017d878388016200008a565b945060208601519150808211156200019457600080fd5b50620001a3868287016200008a565b925050604084015160ff81168114620001bb57600080fd5b809150509250925092565b600181811c90821680620001db57607f821691505b602082108103620001fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025057600081815260208120601f850160051c810160208610156200022b5750805b601f850160051c820191505b818110156200024c5782815560010162000237565b5050505b505050565b81516001600160401b0381111562000271576200027162000074565b6200028981620002828454620001c6565b8462000202565b602080601f831160018114620002c15760008415620002a85750858301515b600019600386901b1c1916600185901b1785556200024c565b600085815260208120601f198616915b82811015620002f257888601518255948401946001909101908401620002d1565b5085821015620003115787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612bd780620003316000396000f3fe6080604052600436106101815760003560e01c80634f6ccce7116100d15780639cc7f7081161008a578063c87b56dd11610064578063c87b56dd14610416578063e345e0bc14610436578063e8a3d48514610456578063e985e9c51461046b57600080fd5b80639cc7f708146103c3578063a22cb465146103e3578063b88d4fde1461040357600080fd5b80634f6ccce71461031b5780636352211e1461033b57806370a082311461035b578063840f71131461037b5780638cb0a5111461039b57806395d89b41146103ae57600080fd5b806318160ddd1161013e5780632f745c59116101185780632f745c59146102b3578063310ed7f0146102d35780633e7e8669146102e657806342842e0e1461030857600080fd5b806318160ddd1461026b57806323b872dd14610280578063263f3e7e1461029357600080fd5b806301ffc9a71461018657806306fdde03146101bb578063081812fc146101dd578063095ea7b31461021557806309c3dd871461022a5780630f485c021461024a575b600080fd5b34801561019257600080fd5b506101a66101a13660046124b7565b6104b8565b60405190151581526020015b60405180910390f35b3480156101c757600080fd5b506101d061055b565b6040516101b2919061252c565b3480156101e957600080fd5b506101fd6101f836600461253f565b6105ed565b6040516001600160a01b0390911681526020016101b2565b61022861022336600461256f565b61063f565b005b34801561023657600080fd5b506101d061024536600461253f565b610723565b61025d610258366004612599565b610815565b6040519081526020016101b2565b34801561027757600080fd5b5060055461025d565b61022861028e3660046125ce565b61084d565b34801561029f57600080fd5b5061025d6102ae36600461253f565b61087e565b3480156102bf57600080fd5b5061025d6102ce36600461256f565b6108c6565b6102286102e13660046125fa565b610967565b3480156102f257600080fd5b5060025460405160ff90911681526020016101b2565b6102286103163660046125ce565b61097d565b34801561032757600080fd5b5061025d61033636600461253f565b610998565b34801561034757600080fd5b506101fd61035636600461253f565b610a29565b34801561036757600080fd5b5061025d610376366004612626565b610ac5565b34801561038757600080fd5b506008546101fd906001600160a01b031681565b6102286103a9366004612599565b610b4d565b3480156103ba57600080fd5b506101d0610c0c565b3480156103cf57600080fd5b5061025d6103de36600461253f565b610c1b565b3480156103ef57600080fd5b506102286103fe36600461264f565b610c63565b6102286104113660046126f5565b610c72565b34801561042257600080fd5b506101d061043136600461253f565b610ca4565b34801561044257600080fd5b5061025d6104513660046127a0565b610d43565b34801561046257600080fd5b506101d0610d77565b34801561047757600080fd5b506101a66104863660046127cc565b6001600160a01b0391821660009081526007602090815260408083209390941682526002909201909152205460ff1690565b60006001600160e01b031982166301ffc9a760e01b14806104e957506001600160e01b03198216630354d60560e61b145b8061050457506001600160e01b031982166380ac58cd60e01b145b8061051f57506001600160e01b031982166370b0048160e11b145b8061053a57506001600160e01b0319821663780e9d6360e01b145b8061055557506001600160e01b03198216635b5e139f60e01b145b92915050565b60606000805461056a906127f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610596906127f6565b80156105e35780601f106105b8576101008083540402835291602001916105e3565b820191906000526020600020905b8154815290600101906020018083116105c657829003601f168201915b5050505050905090565b60006105f882610e71565b60008281526006602052604090205460058054909190811061061c5761061c612830565b60009182526020909120600460069092020101546001600160a01b031692915050565b600061064a82610a29565b9050806001600160a01b0316836001600160a01b0316036106865760405162461bcd60e51b815260040161067d90612846565b60405180910390fd5b336001600160a01b03821614806106a257506106a28133610486565b6107145760405162461bcd60e51b815260206004820152603960248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161067d565b61071e8383610ec5565b505050565b6060600061073c60408051602081019091526000815290565b6008549091506001600160a01b031661079c57600081511161076d576040518060200160405280600081525061080e565b8061077784610f5c565b604051602001610788929190612888565b60405160208183030381529060405261080e565b600854604051633601bfc560e11b8152600481018590526001600160a01b0390911690636c037f8a906024015b600060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080e91908101906128c8565b9392505050565b6000610822338584611065565b61082b846110f5565b9050610842838261083b8761087e565b60006110ff565b61080e848284611229565b6108573382611521565b6108735760405162461bcd60e51b815260040161067d9061293f565b61071e8383836115a3565b600061088982610e71565b6000828152600660205260409020546005805490919081106108ad576108ad612830565b9060005260206000209060060201600101549050919050565b60006108d183610ac5565b821061092a5760405162461bcd60e51b815260206004820152602260248201527f455243333532353a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161067d565b6001600160a01b038316600090815260076020526040902080548390811061095457610954612830565b9060005260206000200154905092915050565b610972338483611065565b61071e838383611229565b61071e83838360405180602001604052806000815250610c72565b60006109a360055490565b82106109fd5760405162461bcd60e51b815260206004820152602360248201527f455243333532353a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161067d565b60058281548110610a1057610a10612830565b9060005260206000209060060201600001549050919050565b6000610a3482610e71565b600082815260066020526040902054600580549091908110610a5857610a58612830565b60009182526020909120600360069092020101546001600160a01b0316905080610ac05760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b604482015260640161067d565b919050565b60006001600160a01b038216610b315760405162461bcd60e51b815260206004820152602b60248201527f455243333532353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161067d565b506001600160a01b031660009081526007602052604090205490565b6000610b5884610a29565b9050806001600160a01b0316836001600160a01b031603610b8b5760405162461bcd60e51b815260040161067d90612846565b610b953385611521565b610bfb5760405162461bcd60e51b815260206004820152603160248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161067d565b610c06848484611704565b50505050565b60606001805461056a906127f6565b6000610c2682610e71565b600082815260066020526040902054600580549091908110610c4a57610c4a612830565b9060005260206000209060060201600201549050919050565b610c6e33838361183c565b5050565b610c7c3383611521565b610c985760405162461bcd60e51b815260040161067d9061293f565b610c0684848484611906565b6060610caf82610e71565b6000610cc660408051602081019091526000815290565b6008549091506001600160a01b0316610d12576000815111610cf7576040518060200160405280600081525061080e565b80610d0184610f5c565b604051602001610788929190612991565b6008546040516344a5a61760e11b8152600481018590526001600160a01b039091169063894b4c2e906024016107c9565b6000610d4e83610e71565b5060009182526004602090815260408084206001600160a01b0393909316845291905290205490565b60606000610d9060408051602081019091526000815290565b6008549091506001600160a01b0316610df0576000815111610dc15760405180602001604052806000815250610e6b565b80610dcb30611979565b604051602001610ddc9291906129c0565b604051602081830303815290604052610e6b565b600860009054906101000a90046001600160a01b03166001600160a01b031663725fa09c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e6b91908101906128c8565b91505090565b610e7a8161198f565b610ec25760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b604482015260640161067d565b50565b600081815260066020526040902054600580548492908110610ee957610ee9612830565b6000918252602090912060069091020160040180546001600160a01b0319166001600160a01b0392831617905581908316610f2382610a29565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606081600003610f835750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fad5780610f9781612a1a565b9150610fa69050600a83612a49565b9150610f87565b60008167ffffffffffffffff811115610fc857610fc8612686565b6040519080825280601f01601f191660200182016040528015610ff2576020820181803683370190505b5090505b841561105d57611007600183612a5d565b9150611014600a86612a74565b61101f906030612a88565b60f81b81838151811061103457611034612830565b60200101906001600160f81b031916908160001a905350611056600a86612a49565b9450610ff6565b949350505050565b60006110718385610d43565b905061107d8484611521565b15801561108c57506000198114155b15610c0657818110156110e15760405162461bcd60e51b815260206004820152601f60248201527f455243333532353a20696e73756666696369656e7420616c6c6f77616e636500604482015260640161067d565b610c0683856110f08585612a5d565b611704565b60006105556119db565b6001600160a01b03841661115f5760405162461bcd60e51b815260206004820152602160248201527f455243333532353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161067d565b826000036111b95760405162461bcd60e51b815260206004820152602160248201527f455243333532353a2063616e6e6f74206d696e74207a65726f20746f6b656e496044820152601960fa1b606482015260840161067d565b6111c28361198f565b1561120f5760405162461bcd60e51b815260206004820152601d60248201527f455243333532353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161067d565b61121a8484846119f5565b6112248382611abb565b610c06565b6112328361198f565b61128e5760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e736665722066726f6d20696e76616c696420746044820152661bdad95b88125160ca1b606482015260840161067d565b6112978261198f565b6112f15760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20696e76616c696420746f6b604482015264195b88125160da1b606482015260840161067d565b60008381526006602052604081205460058054909190811061131557611315612830565b906000526020600020906006020190506000600560066000868152602001908152602001600020548154811061134d5761134d612830565b9060005260206000209060060201905082826002015410156113c45760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b606482015260840161067d565b80600101548260010154146114325760405162461bcd60e51b815260206004820152602e60248201527f455243333532353a207472616e7366657220746f20746f6b656e20776974682060448201526d191a5999995c995b9d081cdb1bdd60921b606482015260840161067d565b828260020160008282546114469190612a5d565b92505081905550828160020160008282546114619190612a88565b9091555050604051838152849086907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a36114b885858560405180602001604052806000815250611b40565b61151a5760405162461bcd60e51b815260206004820152602d60248201527f455243333532353a207472616e736665722072656a656374656420627920455260448201526c21999a991aa932b1b2b4bb32b960991b606482015260840161067d565b5050505050565b60008061152d83610a29565b9050806001600160a01b0316846001600160a01b0316148061157857506001600160a01b038082166000908152600760209081526040808320938816835260029093019052205460ff165b8061105d5750836001600160a01b0316611591846105ed565b6001600160a01b031614949350505050565b826001600160a01b03166115b682610a29565b6001600160a01b0316146116185760405162461bcd60e51b8152602060048201526024808201527f455243333532353a207472616e736665722066726f6d20696e76616c6964206f6044820152633bb732b960e11b606482015260840161067d565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161067d565b60006116878261087e565b9050600061169483610c1b565b90506116a1600084610ec5565b6116aa83611cb0565b6116b48584611d5b565b6116be8484611e7c565b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461151a565b6001600160a01b03821661176d5760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20617070726f76652076616c756520746f20746865207a65604482015269726f206164647265737360b01b606482015260840161067d565b6117778284611f05565b6117dd5760008381526006602052604090205460058054909190811061179f5761179f612830565b60009182526020808320600692909202909101600501805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008381526004602090815260408083206001600160a01b038616808552908352928190208490555183815285917f621b050de0ad08b51d19b48b3e6df75348c4de6bdd93e81b252ca62e28265b1b91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b03160361189d5760405162461bcd60e51b815260206004820152601a60248201527f455243333532353a20617070726f766520746f2063616c6c6572000000000000604482015260640161067d565b6001600160a01b0383811660008181526007602090815260408083209487168084526002909501825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910161182f565b6119118484846115a3565b61191d84848484611fd8565b610c065760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e7366657220746f206e6f6e204552433732315260448201526632b1b2b4bb32b960c91b606482015260840161067d565b60606105556001600160a01b038316601461211e565b6005546000901580159061055557506000828152600660205260409020546005805484929081106119c2576119c2612830565b9060005260206000209060060201600001541492915050565b60038054600091826119ec83612a1a565b91905055905090565b6040805160c081018252838152602080820184905260008284018190526001600160a01b038716606084015260808301819052835181815291820190935260a08201529050611a43816122ba565b611a4d8484611e7c565b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816000847fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a450505050565b600082815260066020526040902054600580548392908110611adf57611adf612830565b90600052602060002090600602016002016000828254611aff9190612a88565b909155505060405181815282906000907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a35050565b600080611b4c85610a29565b9050803b63ffffffff1615611ca6576040516301ffc9a760e01b8152629ce20b60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa925050508015611bc1575060408051601f3d908101601f19168201909252611bbe91810190612aa0565b60015b611c00573d808015611bef576040519150601f19603f3d011682016040523d82523d6000602084013e611bf4565b606091505b5060019250505061105d565b8015611c9b57604051629ce20b60e01b81526000906001600160a01b03841690629ce20b90611c3b9033908c908c908c908c90600401612abd565b6020604051808303816000875af1158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190612afb565b6001600160e01b031916629ce20b60e01b14935061105d92505050565b60019250505061105d565b600191505061105d565b600081815260066020526040812054600580549091908110611cd457611cd4612830565b600091825260208220600560069092020190810154909250905b81811015611d4c576000836005018281548110611d0d57611d0d612830565b60009182526020808320909101548783526004825260408084206001600160a01b03909216845291528120555080611d4481612a1a565b915050611cee565b5061071e600583016000612409565b600081815260066020526040812054600580549091908110611d7f57611d7f612830565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b0394851617905591841681526007909152604081208054909190611dce90600190612a5d565b90506000826000018281548110611de757611de7612830565b90600052602060002001549050600083600101600086815260200190815260200160002054905081846000018281548110611e2457611e24612830565b60009182526020808320909101929092558381526001860190915260408082208390558682528120558354849080611e5e57611e5e612b18565b60019003818190600052602060002001600090559055505050505050565b600081815260066020526040902054600580548492908110611ea057611ea0612830565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b03948516179055939091168152600780845260408083208054858552600182810188529285208190559286529082018155825292902090910155565b600081815260066020526040812054600580548392908110611f2957611f29612830565b6000918252602082206005600690920201015491505b81811015611fcd57600084815260066020526040902054600580546001600160a01b03881692908110611f7457611f74612830565b90600052602060002090600602016005018281548110611f9657611f96612830565b6000918252602090912001546001600160a01b031603611fbb57600192505050610555565b80611fc581612a1a565b915050611f3f565b506000949350505050565b6000833b63ffffffff161561211657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612019903390899088908890600401612b2e565b6020604051808303816000875af1925050508015612054575060408051601f3d908101601f1916820190925261205191810190612afb565b60015b6120fc573d808015612082576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b606091505b5080516000036120f45760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161067d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061105d565b50600161105d565b6060600061212d836002612b6b565b612138906002612a88565b67ffffffffffffffff81111561215057612150612686565b6040519080825280601f01601f19166020018201604052801561217a576020820181803683370190505b509050600360fc1b8160008151811061219557612195612830565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121c4576121c4612830565b60200101906001600160f81b031916908160001a90535060006121e8846002612b6b565b6121f3906001612a88565b90505b600181111561226b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061222757612227612830565b1a60f81b82828151811061223d5761223d612830565b60200101906001600160f81b031916908160001a90535060049490941c9361226481612b8a565b90506121f6565b50831561080e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161067d565b600580548251600090815260066020818152604080842085905560018501865594909252845192027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101928355818501517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1820155928401517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db284015560608401517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db3840180546001600160a01b039283166001600160a01b03199182161790915560808601517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48601805491909316911617905560a084015180518594610c06937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5909101920190612427565b5080546000825590600052602060002090810190610ec2919061248c565b82805482825590600052602060002090810192821561247c579160200282015b8281111561247c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612447565b5061248892915061248c565b5090565b5b80821115612488576000815560010161248d565b6001600160e01b031981168114610ec257600080fd5b6000602082840312156124c957600080fd5b813561080e816124a1565b60005b838110156124ef5781810151838201526020016124d7565b83811115610c065750506000910152565b600081518084526125188160208601602086016124d4565b601f01601f19169290920160200192915050565b60208152600061080e6020830184612500565b60006020828403121561255157600080fd5b5035919050565b80356001600160a01b0381168114610ac057600080fd5b6000806040838503121561258257600080fd5b61258b83612558565b946020939093013593505050565b6000806000606084860312156125ae57600080fd5b833592506125be60208501612558565b9150604084013590509250925092565b6000806000606084860312156125e357600080fd5b6125ec84612558565b92506125be60208501612558565b60008060006060848603121561260f57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561263857600080fd5b61080e82612558565b8015158114610ec257600080fd5b6000806040838503121561266257600080fd5b61266b83612558565b9150602083013561267b81612641565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126c5576126c5612686565b604052919050565b600067ffffffffffffffff8211156126e7576126e7612686565b50601f01601f191660200190565b6000806000806080858703121561270b57600080fd5b61271485612558565b935061272260208601612558565b925060408501359150606085013567ffffffffffffffff81111561274557600080fd5b8501601f8101871361275657600080fd5b8035612769612764826126cd565b61269c565b81815288602083850101111561277e57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080604083850312156127b357600080fd5b823591506127c360208401612558565b90509250929050565b600080604083850312156127df57600080fd5b6127e883612558565b91506127c360208401612558565b600181811c9082168061280a57607f821691505b60208210810361282a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f455243333532353a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b6000835161289a8184602088016124d4565b64736c6f742f60d81b90830190815283516128bc8160058401602088016124d4565b01600501949350505050565b6000602082840312156128da57600080fd5b815167ffffffffffffffff8111156128f157600080fd5b8201601f8101841361290257600080fd5b8051612910612764826126cd565b81815285602083850101111561292557600080fd5b6129368260208301602086016124d4565b95945050505050565b60208082526032908201527f455243333532353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b600083516129a38184602088016124d4565b8351908301906129b78183602088016124d4565b01949350505050565b600083516129d28184602088016124d4565b68636f6e74726163742f60b81b90830190815283516129f88160098401602088016124d4565b01600901949350505050565b634e487b7160e01b600052601160045260246000fd5b600060018201612a2c57612a2c612a04565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612a5857612a58612a33565b500490565b600082821015612a6f57612a6f612a04565b500390565b600082612a8357612a83612a33565b500690565b60008219821115612a9b57612a9b612a04565b500190565b600060208284031215612ab257600080fd5b815161080e81612641565b60018060a01b038616815284602082015283604082015282606082015260a060808201526000612af060a0830184612500565b979650505050505050565b600060208284031215612b0d57600080fd5b815161080e816124a1565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b6190830184612500565b9695505050505050565b6000816000190483118215151615612b8557612b85612a04565b500290565b600081612b9957612b99612a04565b50600019019056fea2646970667358221220a8f2b844d7753f3f76ea841ab07c25cbb9cbc38ca7d4353694234690c63f00d764736f6c634300080f0033",
  "deployedBytecode": "0x6080604052600436106101815760003560e01c80634f6ccce7116100d15780639cc7f7081161008a578063c87b56dd11610064578063c87b56dd14610416578063e345e0bc14610436578063e8a3d48514610456578063e985e9c51461046b57600080fd5b80639cc7f708146103c3578063a22cb465146103e3578063b88d4fde1461040357600080fd5b80634f6ccce71461031b5780636352211e1461033b57806370a082311461035b578063840f71131461037b5780638cb0a5111461039b57806395d89b41146103ae57600080fd5b806318160ddd1161013e5780632f745c59116101185780632f745c59146102b3578063310ed7f0146102d35780633e7e8669146102e657806342842e0e1461030857600080fd5b806318160ddd1461026b57806323b872dd14610280578063263f3e7e1461029357600080fd5b806301ffc9a71461018657806306fdde03146101bb578063081812fc146101dd578063095ea7b31461021557806309c3dd871461022a5780630f485c021461024a575b600080fd5b34801561019257600080fd5b506101a66101a13660046124b7565b6104b8565b60405190151581526020015b60405180910390f35b3480156101c757600080fd5b506101d061055b565b6040516101b2919061252c565b3480156101e957600080fd5b506101fd6101f836600461253f565b6105ed565b6040516001600160a01b0390911681526020016101b2565b61022861022336600461256f565b61063f565b005b34801561023657600080fd5b506101d061024536600461253f565b610723565b61025d610258366004612599565b610815565b6040519081526020016101b2565b34801561027757600080fd5b5060055461025d565b61022861028e3660046125ce565b61084d565b34801561029f57600080fd5b5061025d6102ae36600461253f565b61087e565b3480156102bf57600080fd5b5061025d6102ce36600461256f565b6108c6565b6102286102e13660046125fa565b610967565b3480156102f257600080fd5b5060025460405160ff90911681526020016101b2565b6102286103163660046125ce565b61097d565b34801561032757600080fd5b5061025d61033636600461253f565b610998565b34801561034757600080fd5b506101fd61035636600461253f565b610a29565b34801561036757600080fd5b5061025d610376366004612626565b610ac5565b34801561038757600080fd5b506008546101fd906001600160a01b031681565b6102286103a9366004612599565b610b4d565b3480156103ba57600080fd5b506101d0610c0c565b3480156103cf57600080fd5b5061025d6103de36600461253f565b610c1b565b3480156103ef57600080fd5b506102286103fe36600461264f565b610c63565b6102286104113660046126f5565b610c72565b34801561042257600080fd5b506101d061043136600461253f565b610ca4565b34801561044257600080fd5b5061025d6104513660046127a0565b610d43565b34801561046257600080fd5b506101d0610d77565b34801561047757600080fd5b506101a66104863660046127cc565b6001600160a01b0391821660009081526007602090815260408083209390941682526002909201909152205460ff1690565b60006001600160e01b031982166301ffc9a760e01b14806104e957506001600160e01b03198216630354d60560e61b145b8061050457506001600160e01b031982166380ac58cd60e01b145b8061051f57506001600160e01b031982166370b0048160e11b145b8061053a57506001600160e01b0319821663780e9d6360e01b145b8061055557506001600160e01b03198216635b5e139f60e01b145b92915050565b60606000805461056a906127f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610596906127f6565b80156105e35780601f106105b8576101008083540402835291602001916105e3565b820191906000526020600020905b8154815290600101906020018083116105c657829003601f168201915b5050505050905090565b60006105f882610e71565b60008281526006602052604090205460058054909190811061061c5761061c612830565b60009182526020909120600460069092020101546001600160a01b031692915050565b600061064a82610a29565b9050806001600160a01b0316836001600160a01b0316036106865760405162461bcd60e51b815260040161067d90612846565b60405180910390fd5b336001600160a01b03821614806106a257506106a28133610486565b6107145760405162461bcd60e51b815260206004820152603960248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606482015260840161067d565b61071e8383610ec5565b505050565b6060600061073c60408051602081019091526000815290565b6008549091506001600160a01b031661079c57600081511161076d576040518060200160405280600081525061080e565b8061077784610f5c565b604051602001610788929190612888565b60405160208183030381529060405261080e565b600854604051633601bfc560e11b8152600481018590526001600160a01b0390911690636c037f8a906024015b600060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080e91908101906128c8565b9392505050565b6000610822338584611065565b61082b846110f5565b9050610842838261083b8761087e565b60006110ff565b61080e848284611229565b6108573382611521565b6108735760405162461bcd60e51b815260040161067d9061293f565b61071e8383836115a3565b600061088982610e71565b6000828152600660205260409020546005805490919081106108ad576108ad612830565b9060005260206000209060060201600101549050919050565b60006108d183610ac5565b821061092a5760405162461bcd60e51b815260206004820152602260248201527f455243333532353a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161067d565b6001600160a01b038316600090815260076020526040902080548390811061095457610954612830565b9060005260206000200154905092915050565b610972338483611065565b61071e838383611229565b61071e83838360405180602001604052806000815250610c72565b60006109a360055490565b82106109fd5760405162461bcd60e51b815260206004820152602360248201527f455243333532353a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b606482015260840161067d565b60058281548110610a1057610a10612830565b9060005260206000209060060201600001549050919050565b6000610a3482610e71565b600082815260066020526040902054600580549091908110610a5857610a58612830565b60009182526020909120600360069092020101546001600160a01b0316905080610ac05760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b604482015260640161067d565b919050565b60006001600160a01b038216610b315760405162461bcd60e51b815260206004820152602b60248201527f455243333532353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161067d565b506001600160a01b031660009081526007602052604090205490565b6000610b5884610a29565b9050806001600160a01b0316836001600160a01b031603610b8b5760405162461bcd60e51b815260040161067d90612846565b610b953385611521565b610bfb5760405162461bcd60e51b815260206004820152603160248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606482015260840161067d565b610c06848484611704565b50505050565b60606001805461056a906127f6565b6000610c2682610e71565b600082815260066020526040902054600580549091908110610c4a57610c4a612830565b9060005260206000209060060201600201549050919050565b610c6e33838361183c565b5050565b610c7c3383611521565b610c985760405162461bcd60e51b815260040161067d9061293f565b610c0684848484611906565b6060610caf82610e71565b6000610cc660408051602081019091526000815290565b6008549091506001600160a01b0316610d12576000815111610cf7576040518060200160405280600081525061080e565b80610d0184610f5c565b604051602001610788929190612991565b6008546040516344a5a61760e11b8152600481018590526001600160a01b039091169063894b4c2e906024016107c9565b6000610d4e83610e71565b5060009182526004602090815260408084206001600160a01b0393909316845291905290205490565b60606000610d9060408051602081019091526000815290565b6008549091506001600160a01b0316610df0576000815111610dc15760405180602001604052806000815250610e6b565b80610dcb30611979565b604051602001610ddc9291906129c0565b604051602081830303815290604052610e6b565b600860009054906101000a90046001600160a01b03166001600160a01b031663725fa09c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e43573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e6b91908101906128c8565b91505090565b610e7a8161198f565b610ec25760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b604482015260640161067d565b50565b600081815260066020526040902054600580548492908110610ee957610ee9612830565b6000918252602090912060069091020160040180546001600160a01b0319166001600160a01b0392831617905581908316610f2382610a29565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606081600003610f835750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fad5780610f9781612a1a565b9150610fa69050600a83612a49565b9150610f87565b60008167ffffffffffffffff811115610fc857610fc8612686565b6040519080825280601f01601f191660200182016040528015610ff2576020820181803683370190505b5090505b841561105d57611007600183612a5d565b9150611014600a86612a74565b61101f906030612a88565b60f81b81838151811061103457611034612830565b60200101906001600160f81b031916908160001a905350611056600a86612a49565b9450610ff6565b949350505050565b60006110718385610d43565b905061107d8484611521565b15801561108c57506000198114155b15610c0657818110156110e15760405162461bcd60e51b815260206004820152601f60248201527f455243333532353a20696e73756666696369656e7420616c6c6f77616e636500604482015260640161067d565b610c0683856110f08585612a5d565b611704565b60006105556119db565b6001600160a01b03841661115f5760405162461bcd60e51b815260206004820152602160248201527f455243333532353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161067d565b826000036111b95760405162461bcd60e51b815260206004820152602160248201527f455243333532353a2063616e6e6f74206d696e74207a65726f20746f6b656e496044820152601960fa1b606482015260840161067d565b6111c28361198f565b1561120f5760405162461bcd60e51b815260206004820152601d60248201527f455243333532353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161067d565b61121a8484846119f5565b6112248382611abb565b610c06565b6112328361198f565b61128e5760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e736665722066726f6d20696e76616c696420746044820152661bdad95b88125160ca1b606482015260840161067d565b6112978261198f565b6112f15760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20696e76616c696420746f6b604482015264195b88125160da1b606482015260840161067d565b60008381526006602052604081205460058054909190811061131557611315612830565b906000526020600020906006020190506000600560066000868152602001908152602001600020548154811061134d5761134d612830565b9060005260206000209060060201905082826002015410156113c45760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b606482015260840161067d565b80600101548260010154146114325760405162461bcd60e51b815260206004820152602e60248201527f455243333532353a207472616e7366657220746f20746f6b656e20776974682060448201526d191a5999995c995b9d081cdb1bdd60921b606482015260840161067d565b828260020160008282546114469190612a5d565b92505081905550828160020160008282546114619190612a88565b9091555050604051838152849086907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a36114b885858560405180602001604052806000815250611b40565b61151a5760405162461bcd60e51b815260206004820152602d60248201527f455243333532353a207472616e736665722072656a656374656420627920455260448201526c21999a991aa932b1b2b4bb32b960991b606482015260840161067d565b5050505050565b60008061152d83610a29565b9050806001600160a01b0316846001600160a01b0316148061157857506001600160a01b038082166000908152600760209081526040808320938816835260029093019052205460ff165b8061105d5750836001600160a01b0316611591846105ed565b6001600160a01b031614949350505050565b826001600160a01b03166115b682610a29565b6001600160a01b0316146116185760405162461bcd60e51b8152602060048201526024808201527f455243333532353a207472616e736665722066726f6d20696e76616c6964206f6044820152633bb732b960e11b606482015260840161067d565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161067d565b60006116878261087e565b9050600061169483610c1b565b90506116a1600084610ec5565b6116aa83611cb0565b6116b48584611d5b565b6116be8484611e7c565b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461151a565b6001600160a01b03821661176d5760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20617070726f76652076616c756520746f20746865207a65604482015269726f206164647265737360b01b606482015260840161067d565b6117778284611f05565b6117dd5760008381526006602052604090205460058054909190811061179f5761179f612830565b60009182526020808320600692909202909101600501805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008381526004602090815260408083206001600160a01b038616808552908352928190208490555183815285917f621b050de0ad08b51d19b48b3e6df75348c4de6bdd93e81b252ca62e28265b1b91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b03160361189d5760405162461bcd60e51b815260206004820152601a60248201527f455243333532353a20617070726f766520746f2063616c6c6572000000000000604482015260640161067d565b6001600160a01b0383811660008181526007602090815260408083209487168084526002909501825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910161182f565b6119118484846115a3565b61191d84848484611fd8565b610c065760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e7366657220746f206e6f6e204552433732315260448201526632b1b2b4bb32b960c91b606482015260840161067d565b60606105556001600160a01b038316601461211e565b6005546000901580159061055557506000828152600660205260409020546005805484929081106119c2576119c2612830565b9060005260206000209060060201600001541492915050565b60038054600091826119ec83612a1a565b91905055905090565b6040805160c081018252838152602080820184905260008284018190526001600160a01b038716606084015260808301819052835181815291820190935260a08201529050611a43816122ba565b611a4d8484611e7c565b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816000847fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a450505050565b600082815260066020526040902054600580548392908110611adf57611adf612830565b90600052602060002090600602016002016000828254611aff9190612a88565b909155505060405181815282906000907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a35050565b600080611b4c85610a29565b9050803b63ffffffff1615611ca6576040516301ffc9a760e01b8152629ce20b60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa925050508015611bc1575060408051601f3d908101601f19168201909252611bbe91810190612aa0565b60015b611c00573d808015611bef576040519150601f19603f3d011682016040523d82523d6000602084013e611bf4565b606091505b5060019250505061105d565b8015611c9b57604051629ce20b60e01b81526000906001600160a01b03841690629ce20b90611c3b9033908c908c908c908c90600401612abd565b6020604051808303816000875af1158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190612afb565b6001600160e01b031916629ce20b60e01b14935061105d92505050565b60019250505061105d565b600191505061105d565b600081815260066020526040812054600580549091908110611cd457611cd4612830565b600091825260208220600560069092020190810154909250905b81811015611d4c576000836005018281548110611d0d57611d0d612830565b60009182526020808320909101548783526004825260408084206001600160a01b03909216845291528120555080611d4481612a1a565b915050611cee565b5061071e600583016000612409565b600081815260066020526040812054600580549091908110611d7f57611d7f612830565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b0394851617905591841681526007909152604081208054909190611dce90600190612a5d565b90506000826000018281548110611de757611de7612830565b90600052602060002001549050600083600101600086815260200190815260200160002054905081846000018281548110611e2457611e24612830565b60009182526020808320909101929092558381526001860190915260408082208390558682528120558354849080611e5e57611e5e612b18565b60019003818190600052602060002001600090559055505050505050565b600081815260066020526040902054600580548492908110611ea057611ea0612830565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b03948516179055939091168152600780845260408083208054858552600182810188529285208190559286529082018155825292902090910155565b600081815260066020526040812054600580548392908110611f2957611f29612830565b6000918252602082206005600690920201015491505b81811015611fcd57600084815260066020526040902054600580546001600160a01b03881692908110611f7457611f74612830565b90600052602060002090600602016005018281548110611f9657611f96612830565b6000918252602090912001546001600160a01b031603611fbb57600192505050610555565b80611fc581612a1a565b915050611f3f565b506000949350505050565b6000833b63ffffffff161561211657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612019903390899088908890600401612b2e565b6020604051808303816000875af1925050508015612054575060408051601f3d908101601f1916820190925261205191810190612afb565b60015b6120fc573d808015612082576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b606091505b5080516000036120f45760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161067d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061105d565b50600161105d565b6060600061212d836002612b6b565b612138906002612a88565b67ffffffffffffffff81111561215057612150612686565b6040519080825280601f01601f19166020018201604052801561217a576020820181803683370190505b509050600360fc1b8160008151811061219557612195612830565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121c4576121c4612830565b60200101906001600160f81b031916908160001a90535060006121e8846002612b6b565b6121f3906001612a88565b90505b600181111561226b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061222757612227612830565b1a60f81b82828151811061223d5761223d612830565b60200101906001600160f81b031916908160001a90535060049490941c9361226481612b8a565b90506121f6565b50831561080e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161067d565b600580548251600090815260066020818152604080842085905560018501865594909252845192027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101928355818501517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1820155928401517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db284015560608401517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db3840180546001600160a01b039283166001600160a01b03199182161790915560808601517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48601805491909316911617905560a084015180518594610c06937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db5909101920190612427565b5080546000825590600052602060002090810190610ec2919061248c565b82805482825590600052602060002090810192821561247c579160200282015b8281111561247c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612447565b5061248892915061248c565b5090565b5b80821115612488576000815560010161248d565b6001600160e01b031981168114610ec257600080fd5b6000602082840312156124c957600080fd5b813561080e816124a1565b60005b838110156124ef5781810151838201526020016124d7565b83811115610c065750506000910152565b600081518084526125188160208601602086016124d4565b601f01601f19169290920160200192915050565b60208152600061080e6020830184612500565b60006020828403121561255157600080fd5b5035919050565b80356001600160a01b0381168114610ac057600080fd5b6000806040838503121561258257600080fd5b61258b83612558565b946020939093013593505050565b6000806000606084860312156125ae57600080fd5b833592506125be60208501612558565b9150604084013590509250925092565b6000806000606084860312156125e357600080fd5b6125ec84612558565b92506125be60208501612558565b60008060006060848603121561260f57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561263857600080fd5b61080e82612558565b8015158114610ec257600080fd5b6000806040838503121561266257600080fd5b61266b83612558565b9150602083013561267b81612641565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126c5576126c5612686565b604052919050565b600067ffffffffffffffff8211156126e7576126e7612686565b50601f01601f191660200190565b6000806000806080858703121561270b57600080fd5b61271485612558565b935061272260208601612558565b925060408501359150606085013567ffffffffffffffff81111561274557600080fd5b8501601f8101871361275657600080fd5b8035612769612764826126cd565b61269c565b81815288602083850101111561277e57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080604083850312156127b357600080fd5b823591506127c360208401612558565b90509250929050565b600080604083850312156127df57600080fd5b6127e883612558565b91506127c360208401612558565b600181811c9082168061280a57607f821691505b60208210810361282a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f455243333532353a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b6000835161289a8184602088016124d4565b64736c6f742f60d81b90830190815283516128bc8160058401602088016124d4565b01600501949350505050565b6000602082840312156128da57600080fd5b815167ffffffffffffffff8111156128f157600080fd5b8201601f8101841361290257600080fd5b8051612910612764826126cd565b81815285602083850101111561292557600080fd5b6129368260208301602086016124d4565b95945050505050565b60208082526032908201527f455243333532353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b600083516129a38184602088016124d4565b8351908301906129b78183602088016124d4565b01949350505050565b600083516129d28184602088016124d4565b68636f6e74726163742f60b81b90830190815283516129f88160098401602088016124d4565b01600901949350505050565b634e487b7160e01b600052601160045260246000fd5b600060018201612a2c57612a2c612a04565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082612a5857612a58612a33565b500490565b600082821015612a6f57612a6f612a04565b500390565b600082612a8357612a83612a33565b500690565b60008219821115612a9b57612a9b612a04565b500190565b600060208284031215612ab257600080fd5b815161080e81612641565b60018060a01b038616815284602082015283604082015282606082015260a060808201526000612af060a0830184612500565b979650505050505050565b600060208284031215612b0d57600080fd5b815161080e816124a1565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b6190830184612500565b9695505050505050565b6000816000190483118215151615612b8557612b85612a04565b500290565b600081612b9957612b99612a04565b50600019019056fea2646970667358221220a8f2b844d7753f3f76ea841ab07c25cbb9cbc38ca7d4353694234690c63f00d764736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
