{
  "_format": "hh-sol-artifact-1",
  "contractName": "TicketHarness",
  "sourceName": "contracts/test/TicketHarness.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        }
      ],
      "name": "Delegated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "Deployed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "indexed": false,
          "internalType": "struct ObservationLib.Observation",
          "name": "newTotalSupplyTwab",
          "type": "tuple"
        }
      ],
      "name": "NewTotalSupplyTwab",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "indexed": false,
          "internalType": "struct ObservationLib.Observation",
          "name": "newTwab",
          "type": "tuple"
        }
      ],
      "name": "NewUserTwab",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "TicketInitialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerBurnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "controllerDelegateFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "delegateOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newDelegate",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "delegateWithSignature",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "flashLoan",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "getAccountDetails",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint208",
              "name": "balance",
              "type": "uint208"
            },
            {
              "internalType": "uint24",
              "name": "nextTwabIndex",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "cardinality",
              "type": "uint24"
            }
          ],
          "internalType": "struct TwabLib.AccountDetails",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_startTime",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "_endTime",
          "type": "uint64"
        }
      ],
      "name": "getAverageBalanceBetween",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_startTime",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_endTime",
          "type": "uint32"
        }
      ],
      "name": "getAverageBalanceTx",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64[]",
          "name": "_startTimes",
          "type": "uint64[]"
        },
        {
          "internalType": "uint64[]",
          "name": "_endTimes",
          "type": "uint64[]"
        }
      ],
      "name": "getAverageBalancesBetween",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[]",
          "name": "_startTimes",
          "type": "uint64[]"
        },
        {
          "internalType": "uint64[]",
          "name": "_endTimes",
          "type": "uint64[]"
        }
      ],
      "name": "getAverageTotalSuppliesBetween",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_target",
          "type": "uint64"
        }
      ],
      "name": "getBalanceAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_target",
          "type": "uint32"
        }
      ],
      "name": "getBalanceTx",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64[]",
          "name": "_targets",
          "type": "uint64[]"
        }
      ],
      "name": "getBalancesAt",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[]",
          "name": "_targets",
          "type": "uint64[]"
        }
      ],
      "name": "getTotalSuppliesAt",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_target",
          "type": "uint64"
        }
      ],
      "name": "getTotalSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_index",
          "type": "uint16"
        }
      ],
      "name": "getTwab",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "internalType": "struct ObservationLib.Observation",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mintTwice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "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": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transferTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101a06040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120527f94019368dc6b2ee4ac32010c9d0081ec29874325b541829d001d22c296b5246c610180523480156200005c57600080fd5b5060405162003e8738038062003e878339810160408190526200007f9162000427565b83838383838383836040518060400160405280601c81526020017f506f6f6c546f67657468657220436f6e74726f6c6c6564546f6b656e0000000081525080604051806040016040528060018152602001603160f81b81525086868160039080519060200190620000f2929190620002f0565b50805162000108906004906020840190620002f0565b5050825160209384012082519284019290922060c083815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a018190528183019890985260608101959095526080808601939093523085830152805180860390920182529390920190925280519401939093209092526101005250506001600160a01b038116620002055760405162461bcd60e51b815260206004820152602b60248201527f436f6e74726f6c6c6564546f6b656e2f636f6e74726f6c6c65722d6e6f742d7a60448201526a65726f2d6164647265737360a81b60648201526084015b60405180910390fd5b6001600160601b0319606082901b166101405260ff82166200026a5760405162461bcd60e51b815260206004820181905260248201527f436f6e74726f6c6c6564546f6b656e2f646563696d616c732d67742d7a65726f6044820152606401620001fc565b7fff0000000000000000000000000000000000000000000000000000000000000060f883901b16610160526040516001600160a01b038216907fde72fc29218361f33503847e6f32be813f9ec92fc7c772bb59e46675c890fd0e90620002d690879087908790620004f9565b60405180910390a2505050505050505050505050620005bc565b828054620002fe9062000569565b90600052602060002090601f0160209004810192826200032257600085556200036d565b82601f106200033d57805160ff19168380011785556200036d565b828001600101855582156200036d579182015b828111156200036d57825182559160200191906001019062000350565b506200037b9291506200037f565b5090565b5b808211156200037b576000815560010162000380565b600082601f830112620003a857600080fd5b81516001600160401b0380821115620003c557620003c5620005a6565b604051601f8301601f19908116603f01168101908282118183101715620003f057620003f0620005a6565b816040528381528660208588010111156200040a57600080fd5b6200041d84602083016020890162000536565b9695505050505050565b600080600080608085870312156200043e57600080fd5b84516001600160401b03808211156200045657600080fd5b620004648883890162000396565b955060208701519150808211156200047b57600080fd5b506200048a8782880162000396565b935050604085015160ff81168114620004a257600080fd5b60608601519092506001600160a01b0381168114620004c057600080fd5b939692955090935050565b60008151808452620004e581602086016020860162000536565b601f01601f19169290920160200192915050565b6060815260006200050e6060830186620004cb565b8281036020840152620005228186620004cb565b91505060ff83166040830152949350505050565b60005b838110156200055357818101518382015260200162000539565b8381111562000563576000848401525b50505050565b600181811c908216806200057e57607f821691505b60208210811415620005a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e05161010051610120516101405160601c6101605160f81c610180516138386200064f6000396000610f6b015260006103df0152600081816106be0152818161098601528181610af001528181610c840152610ea0015260006111cd015260006117e9015260006118380152600061181301526000611797015260006117c001526138386000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c806368c7fd571161016057806398b16f36116100d8578063a5f2a1521161008c578063d505accf11610071578063d505accf1461066d578063dd62ed3e14610680578063f77c4791146106b957600080fd5b8063a5f2a15214610647578063a9059cbb1461065a57600080fd5b80639dc29fac116100bd5780639dc29fac146106135780639ecb037014610626578063a457c2d71461063457600080fd5b806398b16f36146105f25780639d9e465c1461060057600080fd5b80638d22ea2a1161012f57806390596dd11161011457806390596dd1146105c4578063919974dc146105d757806395d89b41146105ea57600080fd5b80638d22ea2a1461056a5780638e6d536a146105b157600080fd5b806368c7fd571461050857806370a082311461051b5780637ecebe001461054457806385beb5f11461055757600080fd5b806333e39b611161020e578063456f95e6116101c25780635d7b0758116101a75780635d7b0758146104c2578063613ed6bd146104d5578063631b5dfb146104f557600080fd5b8063456f95e61461049c5780635c19a95c146104af57600080fd5b806336bb2a38116101f357806336bb2a3814610439578063395093511461047657806340c10f191461048957600080fd5b806333e39b611461041c5780633644e5151461043157600080fd5b806323b872dd116102655780632d0dd6861161024a5780632d0dd686146103c5578063313ce567146103d857806331c4293d1461040957600080fd5b806323b872dd146103015780632aceb5341461031457600080fd5b806306fdde0314610297578063095ea7b3146102b557806309daa017146102d857806318160ddd146102f9575b600080fd5b61029f6106e0565b6040516102ac9190613529565b60405180910390f35b6102c86102c3366004613321565b610772565b60405190151581526020016102ac565b6102eb6102e636600461334b565b610789565b6040519081526020016102ac565b6002546102eb565b6102c861030f36600461310a565b6107f8565b61038d6103223660046130bc565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600682529282902082519384018352546001600160d01b038116845262ffffff600160d01b8204811692850192909252600160e81b9004169082015290565b6040805182516001600160d01b0316815260208084015162ffffff9081169183019190915292820151909216908201526060016102ac565b6102eb6103d33660046134ca565b6108be565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102ac565b6102eb610417366004613375565b61090a565b61042f61042a3660046130d7565b61097b565b005b6102eb610a01565b61044c6104473660046132e3565b610a10565b6040805182516001600160e01b0316815260209283015163ffffffff1692810192909252016102ac565b6102c8610484366004613321565b610a88565b61042f610497366004613321565b610ac4565b61042f6104aa366004613321565b610ace565b61042f6104bd3660046130bc565b610ad8565b61042f6104d0366004613321565b610ae5565b6104e86104e336600461320f565b610b5d565b6040516102ac91906134e5565b61042f61050336600461310a565b610c79565b6104e8610516366004613262565b610d52565b6102eb6105293660046130bc565b6001600160a01b031660009081526020819052604090205490565b6102eb6105523660046130bc565b610d84565b6104e861056536600461341c565b610da2565b6105996105783660046130bc565b6001600160a01b039081166000908152630100000760205260409020541690565b6040516001600160a01b0390911681526020016102ac565b6104e86105bf36600461345e565b610e85565b61042f6105d2366004613321565b610e95565b61042f6105e53660046131b0565b610f17565b61029f611097565b6102eb6104173660046133e2565b61042f61060e366004613321565b6110a6565b61042f610621366004613321565b610f0d565b6102eb6102e63660046133b8565b6102c8610642366004613321565b6110b0565b61042f61065536600461310a565b611161565b6102c8610668366004613321565b61116c565b61042f61067b366004613146565b611179565b6102eb61068e3660046130d7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105997f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546106ef906136e6565b80601f016020809104026020016040519081016040528092919081815260200182805461071b906136e6565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077f3384846112dd565b5060015b92915050565b6001600160a01b0382166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b900490931691830191909152906107f09060018301908542611435565b949350505050565b6000610805848484611461565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108a45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6108b185338584036112dd565b60019150505b9392505050565b604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090610783906008908442611435565b6001600160a01b0383166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b90049093169183019190915290610972906001830190868642611685565b95945050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f35760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b6109fd82826116bd565b5050565b6000610a0b611793565b905090565b60408051808201909152600080825260208201526001600160a01b038316600090815260066020526040902060010161ffff831662ffffff8110610a5657610a566137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201529392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161077f918590610abf9086906135e9565b6112dd565b6109fd8282611886565b610ac48282611886565b610ae233826116bd565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ac45760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b60608160008167ffffffffffffffff811115610b7b57610b7b6137c0565b604051908082528060200260200182016040528015610ba4578160200160208202803683370190505b506001600160a01b0387166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b900490931691830191909152929350905b84811015610c6c57610c3d83600101838a8a85818110610c2257610c226137aa565b9050602002016020810190610c3791906134ca565b42611435565b848281518110610c4f57610c4f6137aa565b602090810291909101015280610c648161371b565b915050610c00565b5091979650505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cf15760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b816001600160a01b0316836001600160a01b031614610d43576001600160a01b03828116600090815260016020908152604080832093871683529290522054610d439083908590610abf9085906136b2565b610d4d8282611971565b505050565b6001600160a01b0385166000908152600660205260409020606090610d7a9086868686611b02565b9695505050505050565b6001600160a01b038116600090815260056020526040812054610783565b60608160008167ffffffffffffffff811115610dc057610dc06137c0565b604051908082528060200260200182016040528015610de9578160200160208202803683370190505b50604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915290915060005b83811015610e7a57610e4b600883898985818110610c2257610c226137aa565b838281518110610e5d57610e5d6137aa565b602090810291909101015280610e728161371b565b915050610e2b565b509095945050505050565b6060610972600786868686611b02565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f0d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b6109fd8282611971565b83421115610f675760405162461bcd60e51b815260206004820181905260248201527f5469636b65742f64656c65676174652d657870697265642d646561646c696e65604482015260640161089b565b60007f00000000000000000000000000000000000000000000000000000000000000008787610f958a611ca1565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810186905260c0016040516020818303038152906040528051906020012090506000610fe982611cc9565b90506000610ff982878787611d32565b9050886001600160a01b0316816001600160a01b0316146110825760405162461bcd60e51b815260206004820152602160248201527f5469636b65742f64656c65676174652d696e76616c69642d7369676e6174757260448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b61108c89896116bd565b505050505050505050565b6060600480546106ef906136e6565b610f0d8282611886565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561114a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161089b565b61115733858584036112dd565b5060019392505050565b610d4d838383611461565b600061077f338484611461565b834211156111c95760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161089b565b60007f00000000000000000000000000000000000000000000000000000000000000008888886111f88c611ca1565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061125382611cc9565b9050600061126382878787611d32565b9050896001600160a01b0316816001600160a01b0316146112c65760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161089b565b6112d18a8a8a6112dd565b50505050505050505050565b6001600160a01b0383166113585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0382166113d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000808263ffffffff168463ffffffff16116114515783611453565b825b9050610d7a86868386611d5a565b6001600160a01b0383166114dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0382166115595760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161089b565b611564838383611e73565b6001600160a01b038316600090815260208190526040902054818110156115f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061162a9084906135e9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161167691815260200190565b60405180910390a35b50505050565b6000808263ffffffff168463ffffffff16116116a157836116a3565b825b90506116b28787878487611f06565b979650505050505050565b6001600160a01b038281166000908152602081815260408083205463010000079092529091205490919081169083168114156116f95750505050565b6001600160a01b03848116600090815263010000076020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691851691909117905561174d818484611fa2565b826001600160a01b0316846001600160a01b03167f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea260405160405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156117e257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b0382166118dc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161089b565b6118e860008383611e73565b80600260008282546118fa91906135e9565b90915550506001600160a01b038216600090815260208190526040812080548392906119279084906135e9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166119ed5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6119f982600083611e73565b6001600160a01b03821660009081526020819052604090205481811015611a885760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611ab79084906136b2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606083828114611b7a5760405162461bcd60e51b815260206004820152602360248201527f5469636b65742f73746172742d656e642d74696d65732d6c656e6774682d6d6160448201527f7463680000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6040805160608101825288546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915260008267ffffffffffffffff811115611bcf57611bcf6137c0565b604051908082528060200260200182016040528015611bf8578160200160208202803683370190505b5090504260005b84811015611c9257611c638b600101858c8c85818110611c2157611c216137aa565b9050602002016020810190611c3691906134ca565b8b8b86818110611c4857611c486137aa565b9050602002016020810190611c5d91906134ca565b86611685565b838281518110611c7557611c756137aa565b602090810291909101015280611c8a8161371b565b915050611bff565b50909998505050505050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b6000610783611cd6611793565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611d4387878787612002565b91509150611d50816120ef565b5095945050505050565b604080518082019091526000808252602082018190529081906040805180820190915260008082526020820152611d9188886122e0565b60208101519194509150611db29063ffffffff908116908890889061236016565b15611dcd57505084516001600160d01b031691506107f09050565b6000611dd98989612431565b6020810151909350909150611dfa9063ffffffff808a16919089906124ae16565b15611e0c5760009450505050506107f0565b611e1e8985838a8c604001518b61257d565b8094508193505050611e39836020015183602001518861274a565b63ffffffff1682600001518460000151611e53919061368a565b611e5d9190613621565b6001600160e01b03169998505050505050505050565b816001600160a01b0316836001600160a01b03161415611e9257505050565b60006001600160a01b03841615611ec357506001600160a01b03808416600090815263010000076020526040902054165b60006001600160a01b03841615611ef457506001600160a01b03808416600090815263010000076020526040902054165b611eff828285611fa2565b5050505050565b6000806000611f158888612431565b91509150600080611f268a8a6122e0565b915091506000611f3c8b8b8487878a8f8e612814565b90506000611f508c8c8588888b8f8f612814565b9050611f65816020015183602001518a61274a565b63ffffffff1682600001518260000151611f7f919061368a565b611f899190613621565b6001600160e01b03169c9b505050505050505050505050565b6001600160a01b03831615611fd257611fbb838261295e565b6001600160a01b038216611fd257611fd281612ab3565b6001600160a01b03821615610d4d57611feb8282612bcc565b6001600160a01b038316610d4d57610d4d81612c03565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561203957506000905060036120e6565b8460ff16601b1415801561205157508460ff16601c14155b1561206257506000905060046120e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156120b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120df576000600192509250506120e6565b9150600090505b94509492505050565b600081600481111561210357612103613794565b141561210c5750565b600181600481111561212057612120613794565b141561216e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161089b565b600281600481111561218257612182613794565b14156121d05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161089b565b60038160048111156121e4576121e4613794565b14156122585760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b600481600481111561226c5761226c613794565b1415610ae25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b604080518082019091526000808252602082018190529061230f836020015162ffffff1662ffffff8016612c1e565b9150838262ffffff1662ffffff811061232a5761232a6137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820152919491935090915050565b60008163ffffffff168463ffffffff161115801561238a57508163ffffffff168363ffffffff1611155b156123a6578263ffffffff168463ffffffff16111590506108b7565b60008263ffffffff168563ffffffff16116123d5576123d063ffffffff8616640100000000613601565b6123dd565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116124155761241063ffffffff8616640100000000613601565b61241d565b8463ffffffff165b64ffffffffff169091111595945050505050565b604080518082019091526000808252602082018190529082602001519150838262ffffff1662ffffff8110612468576124686137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16602082018190529091506124a75760009150838261232a565b9250929050565b60008163ffffffff168463ffffffff16111580156124d857508163ffffffff168363ffffffff1611155b156124f3578263ffffffff168463ffffffff161090506108b7565b60008263ffffffff168563ffffffff16116125225761251d63ffffffff8616640100000000613601565b61252a565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116125625761255d63ffffffff8616640100000000613601565b61256a565b8463ffffffff165b64ffffffffff1690911095945050505050565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260008662ffffff1690506000818962ffffff16106125c8578862ffffff166125e3565b60016125d962ffffff8816846135e9565b6125e391906136b2565b905060005b60026125f483856135e9565b6125fe9190613647565b90508a612610828962ffffff16612c48565b62ffffff1662ffffff8110612627576126276137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16602082018190529095508061266f576126678260016135e9565b9350506125e8565b8b61267f838a62ffffff16612c54565b62ffffff1662ffffff8110612696576126966137aa565b604080518082019091529101546001600160e01b038116825263ffffffff600160e01b909104811660208301529095506000906126db90838116908c908b9061236016565b905080801561270457506127048660200151898c63ffffffff166123609092919063ffffffff16565b1561271057505061273c565b80612727576127206001846136b2565b9350612735565b6127328360016135e9565b94505b50506125e8565b505050965096945050505050565b60008163ffffffff168463ffffffff161115801561277457508163ffffffff168363ffffffff1611155b1561278a5761278383856136c9565b90506108b7565b60008263ffffffff168563ffffffff16116127b9576127b463ffffffff8616640100000000613601565b6127c1565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116127f9576127f463ffffffff8616640100000000613601565b612801565b8463ffffffff165b64ffffffffff169050610d7a81836136b2565b60408051808201909152600080825260208201526128478383896020015163ffffffff166124ae9092919063ffffffff16565b1561286b576128648789600001516001600160d01b031685612c64565b9050612952565b8263ffffffff16876020015163ffffffff16141561288a575085612952565b8263ffffffff16866020015163ffffffff1614156128a9575084612952565b6128c88660200151838563ffffffff166124ae9092919063ffffffff16565b156128ed5750604080518082019091526000815263ffffffff83166020820152612952565b6000806129028b8888888e604001518961257d565b91509150600061291b826020015184602001518761274a565b63ffffffff1683600001518360000151612935919061368a565b61293f9190613621565b905061294c838288612c64565b93505050505b98975050505050505050565b80612967575050565b6001600160a01b03821660009081526006602052604081209080806129cb8461298f87612cdf565b6040518060400160405280601b81526020017f5469636b65742f747761622d6275726e2d6c742d62616c616e6365000000000081525042612d62565b82518754602085015160408601516001600160d01b039093167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b9190921602178755919450925090508015612aab576040805183516001600160e01b0316815260208085015163ffffffff16908201526001600160a01b038816917fdd3e7cd3a260a292b0b3306b2ca62f30a7349619a9d09c58109318774c6b627d910160405180910390a25b505050505050565b80612abb5750565b6000806000612aed6007612ace86612cdf565b6040518060600160405280602c81526020016137d7602c913942612d62565b825160078054602086015160408701516001600160d01b039094167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919093160291909117905591945092509050801561167f576040805183516001600160e01b0316815260208085015163ffffffff16908201527f3375b905d617084fa6b7531688cc8046feb1f1a0b8ba2273de03c59d8d84416c910160405180910390a150505050565b80612bd5575050565b6001600160a01b03821660009081526006602052604081209080806129cb84612bfd87612cdf565b42612e26565b80612c0b5750565b6000806000612aed6007612bfd86612cdf565b600081612c2d57506000610783565b6108b76001612c3c84866135e9565b612c4691906136b2565b835b60006108b78284613754565b60006108b7612c468460016135e9565b60408051808201909152600080825260208201526040518060400160405280612ca28660200151858663ffffffff1661274a9092919063ffffffff16565b612cb29063ffffffff168661365b565b8651612cbe91906135a9565b6001600160e01b031681526020018363ffffffff1681525090509392505050565b60006001600160d01b03821115612d5e5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3038206269747300000000000000000000000000000000000000000000000000606482015260840161089b565b5090565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825287546001600160d01b0380821680845262ffffff600160d01b840481166020860152600160e81b9093049092169383019390935260009287919089161115612df85760405162461bcd60e51b815260040161089b9190613529565b50612e07886001018287612ecf565b8251999099036001600160d01b03168252909990985095505050505050565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825286546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090612ea2600188018287612ecf565b83519296509094509250612eb790879061357e565b6001600160d01b031684525091959094509092509050565b60408051606081018252600080825260208201819052918101919091526040805180820190915260008082526020820152600080612f0d87876122e0565b9150508463ffffffff16816020015163ffffffff161415612f3657859350915060009050612fad565b6000612f508288600001516001600160d01b031688612c64565b90508088886020015162ffffff1662ffffff8110612f7057612f706137aa565b825160209093015163ffffffff16600160e01b026001600160e01b03909316929092179101556000612fa188612fb6565b95509093506001925050505b93509350939050565b60408051606081018252600080825260208083018290529282015290820151612fe69062ffffff90811690612c54565b62ffffff9081166020840152604083015181161015612d5e5760018260400181815161301291906135cb565b62ffffff169052505090565b80356001600160a01b038116811461303557600080fd5b919050565b60008083601f84011261304c57600080fd5b50813567ffffffffffffffff81111561306457600080fd5b6020830191508360208260051b85010111156124a757600080fd5b803563ffffffff8116811461303557600080fd5b803567ffffffffffffffff8116811461303557600080fd5b803560ff8116811461303557600080fd5b6000602082840312156130ce57600080fd5b6108b78261301e565b600080604083850312156130ea57600080fd5b6130f38361301e565b91506131016020840161301e565b90509250929050565b60008060006060848603121561311f57600080fd5b6131288461301e565b92506131366020850161301e565b9150604084013590509250925092565b600080600080600080600060e0888a03121561316157600080fd5b61316a8861301e565b96506131786020890161301e565b95506040880135945060608801359350613194608089016130ab565b925060a0880135915060c0880135905092959891949750929550565b60008060008060008060c087890312156131c957600080fd5b6131d28761301e565b95506131e06020880161301e565b9450604087013593506131f5606088016130ab565b92506080870135915060a087013590509295509295509295565b60008060006040848603121561322457600080fd5b61322d8461301e565b9250602084013567ffffffffffffffff81111561324957600080fd5b6132558682870161303a565b9497909650939450505050565b60008060008060006060868803121561327a57600080fd5b6132838661301e565b9450602086013567ffffffffffffffff808211156132a057600080fd5b6132ac89838a0161303a565b909650945060408801359150808211156132c557600080fd5b506132d28882890161303a565b969995985093965092949392505050565b600080604083850312156132f657600080fd5b6132ff8361301e565b9150602083013561ffff8116811461331657600080fd5b809150509250929050565b6000806040838503121561333457600080fd5b61333d8361301e565b946020939093013593505050565b6000806040838503121561335e57600080fd5b6133678361301e565b91506131016020840161307f565b60008060006060848603121561338a57600080fd5b6133938461301e565b92506133a16020850161307f565b91506133af6040850161307f565b90509250925092565b600080604083850312156133cb57600080fd5b6133d48361301e565b915061310160208401613093565b6000806000606084860312156133f757600080fd5b6134008461301e565b925061340e60208501613093565b91506133af60408501613093565b6000806020838503121561342f57600080fd5b823567ffffffffffffffff81111561344657600080fd5b6134528582860161303a565b90969095509350505050565b6000806000806040858703121561347457600080fd5b843567ffffffffffffffff8082111561348c57600080fd5b6134988883890161303a565b909650945060208701359150808211156134b157600080fd5b506134be8782880161303a565b95989497509550505050565b6000602082840312156134dc57600080fd5b6108b782613093565b6020808252825182820181905260009190848201906040850190845b8181101561351d57835183529284019291840191600101613501565b50909695505050505050565b600060208083528351808285015260005b818110156135565785810183015185820160400152820161353a565b81811115613568576000604083870101525b50601f01601f1916929092016040019392505050565b60006001600160d01b038083168185168083038211156135a0576135a0613768565b01949350505050565b60006001600160e01b038083168185168083038211156135a0576135a0613768565b600062ffffff8083168185168083038211156135a0576135a0613768565b600082198211156135fc576135fc613768565b500190565b600064ffffffffff8083168185168083038211156135a0576135a0613768565b60006001600160e01b038084168061363b5761363b61377e565b92169190910492915050565b6000826136565761365661377e565b500490565b60006001600160e01b038083168185168183048111821515161561368157613681613768565b02949350505050565b60006001600160e01b03838116908316818110156136aa576136aa613768565b039392505050565b6000828210156136c4576136c4613768565b500390565b600063ffffffff838116908316818110156136aa576136aa613768565b600181811c908216806136fa57607f821691505b60208210811415611cc357634e487b7160e01b600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561374d5761374d613768565b5060010190565b6000826137635761376361377e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5469636b65742f6275726e2d616d6f756e742d657863656564732d746f74616c2d737570706c792d74776162a26469706673582212202772a0f14c2449c0f6ad1d6298aa78fa0667f14ffa07c5a4155ef8d92945dd9764736f6c63430008060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102925760003560e01c806368c7fd571161016057806398b16f36116100d8578063a5f2a1521161008c578063d505accf11610071578063d505accf1461066d578063dd62ed3e14610680578063f77c4791146106b957600080fd5b8063a5f2a15214610647578063a9059cbb1461065a57600080fd5b80639dc29fac116100bd5780639dc29fac146106135780639ecb037014610626578063a457c2d71461063457600080fd5b806398b16f36146105f25780639d9e465c1461060057600080fd5b80638d22ea2a1161012f57806390596dd11161011457806390596dd1146105c4578063919974dc146105d757806395d89b41146105ea57600080fd5b80638d22ea2a1461056a5780638e6d536a146105b157600080fd5b806368c7fd571461050857806370a082311461051b5780637ecebe001461054457806385beb5f11461055757600080fd5b806333e39b611161020e578063456f95e6116101c25780635d7b0758116101a75780635d7b0758146104c2578063613ed6bd146104d5578063631b5dfb146104f557600080fd5b8063456f95e61461049c5780635c19a95c146104af57600080fd5b806336bb2a38116101f357806336bb2a3814610439578063395093511461047657806340c10f191461048957600080fd5b806333e39b611461041c5780633644e5151461043157600080fd5b806323b872dd116102655780632d0dd6861161024a5780632d0dd686146103c5578063313ce567146103d857806331c4293d1461040957600080fd5b806323b872dd146103015780632aceb5341461031457600080fd5b806306fdde0314610297578063095ea7b3146102b557806309daa017146102d857806318160ddd146102f9575b600080fd5b61029f6106e0565b6040516102ac9190613529565b60405180910390f35b6102c86102c3366004613321565b610772565b60405190151581526020016102ac565b6102eb6102e636600461334b565b610789565b6040519081526020016102ac565b6002546102eb565b6102c861030f36600461310a565b6107f8565b61038d6103223660046130bc565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600682529282902082519384018352546001600160d01b038116845262ffffff600160d01b8204811692850192909252600160e81b9004169082015290565b6040805182516001600160d01b0316815260208084015162ffffff9081169183019190915292820151909216908201526060016102ac565b6102eb6103d33660046134ca565b6108be565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102ac565b6102eb610417366004613375565b61090a565b61042f61042a3660046130d7565b61097b565b005b6102eb610a01565b61044c6104473660046132e3565b610a10565b6040805182516001600160e01b0316815260209283015163ffffffff1692810192909252016102ac565b6102c8610484366004613321565b610a88565b61042f610497366004613321565b610ac4565b61042f6104aa366004613321565b610ace565b61042f6104bd3660046130bc565b610ad8565b61042f6104d0366004613321565b610ae5565b6104e86104e336600461320f565b610b5d565b6040516102ac91906134e5565b61042f61050336600461310a565b610c79565b6104e8610516366004613262565b610d52565b6102eb6105293660046130bc565b6001600160a01b031660009081526020819052604090205490565b6102eb6105523660046130bc565b610d84565b6104e861056536600461341c565b610da2565b6105996105783660046130bc565b6001600160a01b039081166000908152630100000760205260409020541690565b6040516001600160a01b0390911681526020016102ac565b6104e86105bf36600461345e565b610e85565b61042f6105d2366004613321565b610e95565b61042f6105e53660046131b0565b610f17565b61029f611097565b6102eb6104173660046133e2565b61042f61060e366004613321565b6110a6565b61042f610621366004613321565b610f0d565b6102eb6102e63660046133b8565b6102c8610642366004613321565b6110b0565b61042f61065536600461310a565b611161565b6102c8610668366004613321565b61116c565b61042f61067b366004613146565b611179565b6102eb61068e3660046130d7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105997f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546106ef906136e6565b80601f016020809104026020016040519081016040528092919081815260200182805461071b906136e6565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077f3384846112dd565b5060015b92915050565b6001600160a01b0382166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b900490931691830191909152906107f09060018301908542611435565b949350505050565b6000610805848484611461565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108a45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6108b185338584036112dd565b60019150505b9392505050565b604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090610783906008908442611435565b6001600160a01b0383166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b90049093169183019190915290610972906001830190868642611685565b95945050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f35760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b6109fd82826116bd565b5050565b6000610a0b611793565b905090565b60408051808201909152600080825260208201526001600160a01b038316600090815260066020526040902060010161ffff831662ffffff8110610a5657610a566137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201529392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161077f918590610abf9086906135e9565b6112dd565b6109fd8282611886565b610ac48282611886565b610ae233826116bd565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ac45760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b60608160008167ffffffffffffffff811115610b7b57610b7b6137c0565b604051908082528060200260200182016040528015610ba4578160200160208202803683370190505b506001600160a01b0387166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b900490931691830191909152929350905b84811015610c6c57610c3d83600101838a8a85818110610c2257610c226137aa565b9050602002016020810190610c3791906134ca565b42611435565b848281518110610c4f57610c4f6137aa565b602090810291909101015280610c648161371b565b915050610c00565b5091979650505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cf15760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b816001600160a01b0316836001600160a01b031614610d43576001600160a01b03828116600090815260016020908152604080832093871683529290522054610d439083908590610abf9085906136b2565b610d4d8282611971565b505050565b6001600160a01b0385166000908152600660205260409020606090610d7a9086868686611b02565b9695505050505050565b6001600160a01b038116600090815260056020526040812054610783565b60608160008167ffffffffffffffff811115610dc057610dc06137c0565b604051908082528060200260200182016040528015610de9578160200160208202803683370190505b50604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915290915060005b83811015610e7a57610e4b600883898985818110610c2257610c226137aa565b838281518110610e5d57610e5d6137aa565b602090810291909101015280610e728161371b565b915050610e2b565b509095945050505050565b6060610972600786868686611b02565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f0d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015260640161089b565b6109fd8282611971565b83421115610f675760405162461bcd60e51b815260206004820181905260248201527f5469636b65742f64656c65676174652d657870697265642d646561646c696e65604482015260640161089b565b60007f00000000000000000000000000000000000000000000000000000000000000008787610f958a611ca1565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810186905260c0016040516020818303038152906040528051906020012090506000610fe982611cc9565b90506000610ff982878787611d32565b9050886001600160a01b0316816001600160a01b0316146110825760405162461bcd60e51b815260206004820152602160248201527f5469636b65742f64656c65676174652d696e76616c69642d7369676e6174757260448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b61108c89896116bd565b505050505050505050565b6060600480546106ef906136e6565b610f0d8282611886565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561114a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161089b565b61115733858584036112dd565b5060019392505050565b610d4d838383611461565b600061077f338484611461565b834211156111c95760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161089b565b60007f00000000000000000000000000000000000000000000000000000000000000008888886111f88c611ca1565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061125382611cc9565b9050600061126382878787611d32565b9050896001600160a01b0316816001600160a01b0316146112c65760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161089b565b6112d18a8a8a6112dd565b50505050505050505050565b6001600160a01b0383166113585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0382166113d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000808263ffffffff168463ffffffff16116114515783611453565b825b9050610d7a86868386611d5a565b6001600160a01b0383166114dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0382166115595760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161089b565b611564838383611e73565b6001600160a01b038316600090815260208190526040902054818110156115f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061162a9084906135e9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161167691815260200190565b60405180910390a35b50505050565b6000808263ffffffff168463ffffffff16116116a157836116a3565b825b90506116b28787878487611f06565b979650505050505050565b6001600160a01b038281166000908152602081815260408083205463010000079092529091205490919081169083168114156116f95750505050565b6001600160a01b03848116600090815263010000076020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691851691909117905561174d818484611fa2565b826001600160a01b0316846001600160a01b03167f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea260405160405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156117e257507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b0382166118dc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161089b565b6118e860008383611e73565b80600260008282546118fa91906135e9565b90915550506001600160a01b038216600090815260208190526040812080548392906119279084906135e9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166119ed5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6119f982600083611e73565b6001600160a01b03821660009081526020819052604090205481811015611a885760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611ab79084906136b2565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606083828114611b7a5760405162461bcd60e51b815260206004820152602360248201527f5469636b65742f73746172742d656e642d74696d65732d6c656e6774682d6d6160448201527f7463680000000000000000000000000000000000000000000000000000000000606482015260840161089b565b6040805160608101825288546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915260008267ffffffffffffffff811115611bcf57611bcf6137c0565b604051908082528060200260200182016040528015611bf8578160200160208202803683370190505b5090504260005b84811015611c9257611c638b600101858c8c85818110611c2157611c216137aa565b9050602002016020810190611c3691906134ca565b8b8b86818110611c4857611c486137aa565b9050602002016020810190611c5d91906134ca565b86611685565b838281518110611c7557611c756137aa565b602090810291909101015280611c8a8161371b565b915050611bff565b50909998505050505050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b6000610783611cd6611793565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611d4387878787612002565b91509150611d50816120ef565b5095945050505050565b604080518082019091526000808252602082018190529081906040805180820190915260008082526020820152611d9188886122e0565b60208101519194509150611db29063ffffffff908116908890889061236016565b15611dcd57505084516001600160d01b031691506107f09050565b6000611dd98989612431565b6020810151909350909150611dfa9063ffffffff808a16919089906124ae16565b15611e0c5760009450505050506107f0565b611e1e8985838a8c604001518b61257d565b8094508193505050611e39836020015183602001518861274a565b63ffffffff1682600001518460000151611e53919061368a565b611e5d9190613621565b6001600160e01b03169998505050505050505050565b816001600160a01b0316836001600160a01b03161415611e9257505050565b60006001600160a01b03841615611ec357506001600160a01b03808416600090815263010000076020526040902054165b60006001600160a01b03841615611ef457506001600160a01b03808416600090815263010000076020526040902054165b611eff828285611fa2565b5050505050565b6000806000611f158888612431565b91509150600080611f268a8a6122e0565b915091506000611f3c8b8b8487878a8f8e612814565b90506000611f508c8c8588888b8f8f612814565b9050611f65816020015183602001518a61274a565b63ffffffff1682600001518260000151611f7f919061368a565b611f899190613621565b6001600160e01b03169c9b505050505050505050505050565b6001600160a01b03831615611fd257611fbb838261295e565b6001600160a01b038216611fd257611fd281612ab3565b6001600160a01b03821615610d4d57611feb8282612bcc565b6001600160a01b038316610d4d57610d4d81612c03565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561203957506000905060036120e6565b8460ff16601b1415801561205157508460ff16601c14155b1561206257506000905060046120e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156120b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120df576000600192509250506120e6565b9150600090505b94509492505050565b600081600481111561210357612103613794565b141561210c5750565b600181600481111561212057612120613794565b141561216e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161089b565b600281600481111561218257612182613794565b14156121d05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161089b565b60038160048111156121e4576121e4613794565b14156122585760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b600481600481111561226c5761226c613794565b1415610ae25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161089b565b604080518082019091526000808252602082018190529061230f836020015162ffffff1662ffffff8016612c1e565b9150838262ffffff1662ffffff811061232a5761232a6137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820152919491935090915050565b60008163ffffffff168463ffffffff161115801561238a57508163ffffffff168363ffffffff1611155b156123a6578263ffffffff168463ffffffff16111590506108b7565b60008263ffffffff168563ffffffff16116123d5576123d063ffffffff8616640100000000613601565b6123dd565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116124155761241063ffffffff8616640100000000613601565b61241d565b8463ffffffff165b64ffffffffff169091111595945050505050565b604080518082019091526000808252602082018190529082602001519150838262ffffff1662ffffff8110612468576124686137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16602082018190529091506124a75760009150838261232a565b9250929050565b60008163ffffffff168463ffffffff16111580156124d857508163ffffffff168363ffffffff1611155b156124f3578263ffffffff168463ffffffff161090506108b7565b60008263ffffffff168563ffffffff16116125225761251d63ffffffff8616640100000000613601565b61252a565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116125625761255d63ffffffff8616640100000000613601565b61256a565b8463ffffffff165b64ffffffffff1690911095945050505050565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260008662ffffff1690506000818962ffffff16106125c8578862ffffff166125e3565b60016125d962ffffff8816846135e9565b6125e391906136b2565b905060005b60026125f483856135e9565b6125fe9190613647565b90508a612610828962ffffff16612c48565b62ffffff1662ffffff8110612627576126276137aa565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16602082018190529095508061266f576126678260016135e9565b9350506125e8565b8b61267f838a62ffffff16612c54565b62ffffff1662ffffff8110612696576126966137aa565b604080518082019091529101546001600160e01b038116825263ffffffff600160e01b909104811660208301529095506000906126db90838116908c908b9061236016565b905080801561270457506127048660200151898c63ffffffff166123609092919063ffffffff16565b1561271057505061273c565b80612727576127206001846136b2565b9350612735565b6127328360016135e9565b94505b50506125e8565b505050965096945050505050565b60008163ffffffff168463ffffffff161115801561277457508163ffffffff168363ffffffff1611155b1561278a5761278383856136c9565b90506108b7565b60008263ffffffff168563ffffffff16116127b9576127b463ffffffff8616640100000000613601565b6127c1565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116127f9576127f463ffffffff8616640100000000613601565b612801565b8463ffffffff165b64ffffffffff169050610d7a81836136b2565b60408051808201909152600080825260208201526128478383896020015163ffffffff166124ae9092919063ffffffff16565b1561286b576128648789600001516001600160d01b031685612c64565b9050612952565b8263ffffffff16876020015163ffffffff16141561288a575085612952565b8263ffffffff16866020015163ffffffff1614156128a9575084612952565b6128c88660200151838563ffffffff166124ae9092919063ffffffff16565b156128ed5750604080518082019091526000815263ffffffff83166020820152612952565b6000806129028b8888888e604001518961257d565b91509150600061291b826020015184602001518761274a565b63ffffffff1683600001518360000151612935919061368a565b61293f9190613621565b905061294c838288612c64565b93505050505b98975050505050505050565b80612967575050565b6001600160a01b03821660009081526006602052604081209080806129cb8461298f87612cdf565b6040518060400160405280601b81526020017f5469636b65742f747761622d6275726e2d6c742d62616c616e6365000000000081525042612d62565b82518754602085015160408601516001600160d01b039093167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b9190921602178755919450925090508015612aab576040805183516001600160e01b0316815260208085015163ffffffff16908201526001600160a01b038816917fdd3e7cd3a260a292b0b3306b2ca62f30a7349619a9d09c58109318774c6b627d910160405180910390a25b505050505050565b80612abb5750565b6000806000612aed6007612ace86612cdf565b6040518060600160405280602c81526020016137d7602c913942612d62565b825160078054602086015160408701516001600160d01b039094167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919093160291909117905591945092509050801561167f576040805183516001600160e01b0316815260208085015163ffffffff16908201527f3375b905d617084fa6b7531688cc8046feb1f1a0b8ba2273de03c59d8d84416c910160405180910390a150505050565b80612bd5575050565b6001600160a01b03821660009081526006602052604081209080806129cb84612bfd87612cdf565b42612e26565b80612c0b5750565b6000806000612aed6007612bfd86612cdf565b600081612c2d57506000610783565b6108b76001612c3c84866135e9565b612c4691906136b2565b835b60006108b78284613754565b60006108b7612c468460016135e9565b60408051808201909152600080825260208201526040518060400160405280612ca28660200151858663ffffffff1661274a9092919063ffffffff16565b612cb29063ffffffff168661365b565b8651612cbe91906135a9565b6001600160e01b031681526020018363ffffffff1681525090509392505050565b60006001600160d01b03821115612d5e5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3038206269747300000000000000000000000000000000000000000000000000606482015260840161089b565b5090565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825287546001600160d01b0380821680845262ffffff600160d01b840481166020860152600160e81b9093049092169383019390935260009287919089161115612df85760405162461bcd60e51b815260040161089b9190613529565b50612e07886001018287612ecf565b8251999099036001600160d01b03168252909990985095505050505050565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825286546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090612ea2600188018287612ecf565b83519296509094509250612eb790879061357e565b6001600160d01b031684525091959094509092509050565b60408051606081018252600080825260208201819052918101919091526040805180820190915260008082526020820152600080612f0d87876122e0565b9150508463ffffffff16816020015163ffffffff161415612f3657859350915060009050612fad565b6000612f508288600001516001600160d01b031688612c64565b90508088886020015162ffffff1662ffffff8110612f7057612f706137aa565b825160209093015163ffffffff16600160e01b026001600160e01b03909316929092179101556000612fa188612fb6565b95509093506001925050505b93509350939050565b60408051606081018252600080825260208083018290529282015290820151612fe69062ffffff90811690612c54565b62ffffff9081166020840152604083015181161015612d5e5760018260400181815161301291906135cb565b62ffffff169052505090565b80356001600160a01b038116811461303557600080fd5b919050565b60008083601f84011261304c57600080fd5b50813567ffffffffffffffff81111561306457600080fd5b6020830191508360208260051b85010111156124a757600080fd5b803563ffffffff8116811461303557600080fd5b803567ffffffffffffffff8116811461303557600080fd5b803560ff8116811461303557600080fd5b6000602082840312156130ce57600080fd5b6108b78261301e565b600080604083850312156130ea57600080fd5b6130f38361301e565b91506131016020840161301e565b90509250929050565b60008060006060848603121561311f57600080fd5b6131288461301e565b92506131366020850161301e565b9150604084013590509250925092565b600080600080600080600060e0888a03121561316157600080fd5b61316a8861301e565b96506131786020890161301e565b95506040880135945060608801359350613194608089016130ab565b925060a0880135915060c0880135905092959891949750929550565b60008060008060008060c087890312156131c957600080fd5b6131d28761301e565b95506131e06020880161301e565b9450604087013593506131f5606088016130ab565b92506080870135915060a087013590509295509295509295565b60008060006040848603121561322457600080fd5b61322d8461301e565b9250602084013567ffffffffffffffff81111561324957600080fd5b6132558682870161303a565b9497909650939450505050565b60008060008060006060868803121561327a57600080fd5b6132838661301e565b9450602086013567ffffffffffffffff808211156132a057600080fd5b6132ac89838a0161303a565b909650945060408801359150808211156132c557600080fd5b506132d28882890161303a565b969995985093965092949392505050565b600080604083850312156132f657600080fd5b6132ff8361301e565b9150602083013561ffff8116811461331657600080fd5b809150509250929050565b6000806040838503121561333457600080fd5b61333d8361301e565b946020939093013593505050565b6000806040838503121561335e57600080fd5b6133678361301e565b91506131016020840161307f565b60008060006060848603121561338a57600080fd5b6133938461301e565b92506133a16020850161307f565b91506133af6040850161307f565b90509250925092565b600080604083850312156133cb57600080fd5b6133d48361301e565b915061310160208401613093565b6000806000606084860312156133f757600080fd5b6134008461301e565b925061340e60208501613093565b91506133af60408501613093565b6000806020838503121561342f57600080fd5b823567ffffffffffffffff81111561344657600080fd5b6134528582860161303a565b90969095509350505050565b6000806000806040858703121561347457600080fd5b843567ffffffffffffffff8082111561348c57600080fd5b6134988883890161303a565b909650945060208701359150808211156134b157600080fd5b506134be8782880161303a565b95989497509550505050565b6000602082840312156134dc57600080fd5b6108b782613093565b6020808252825182820181905260009190848201906040850190845b8181101561351d57835183529284019291840191600101613501565b50909695505050505050565b600060208083528351808285015260005b818110156135565785810183015185820160400152820161353a565b81811115613568576000604083870101525b50601f01601f1916929092016040019392505050565b60006001600160d01b038083168185168083038211156135a0576135a0613768565b01949350505050565b60006001600160e01b038083168185168083038211156135a0576135a0613768565b600062ffffff8083168185168083038211156135a0576135a0613768565b600082198211156135fc576135fc613768565b500190565b600064ffffffffff8083168185168083038211156135a0576135a0613768565b60006001600160e01b038084168061363b5761363b61377e565b92169190910492915050565b6000826136565761365661377e565b500490565b60006001600160e01b038083168185168183048111821515161561368157613681613768565b02949350505050565b60006001600160e01b03838116908316818110156136aa576136aa613768565b039392505050565b6000828210156136c4576136c4613768565b500390565b600063ffffffff838116908316818110156136aa576136aa613768565b600181811c908216806136fa57607f821691505b60208210811415611cc357634e487b7160e01b600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561374d5761374d613768565b5060010190565b6000826137635761376361377e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5469636b65742f6275726e2d616d6f756e742d657863656564732d746f74616c2d737570706c792d74776162a26469706673582212202772a0f14c2449c0f6ad1d6298aa78fa0667f14ffa07c5a4155ef8d92945dd9764736f6c63430008060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
