0x60806040523480156200001157600080fd5b506040518060400160405280600781526020017f4d79546f6b656e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000285565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029e57607f821691505b60208210811415620002b557620002b462000256565b5b50919050565b612a3f80620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063a22cb46511610071578063a22cb465146102cb578063b88d4fde146102e7578063c87b56dd14610303578063e985e9c514610333578063f2fde38b1461036357610116565b8063715018a6146102695780638da5cb5b1461027357806395d89b4114610291578063a1448194146102af57610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d157806342966c68146101ed5780636352211e1461020957806370a082311461023957610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611c33565b61037f565b6040516101429190611c7b565b60405180910390f35b610153610461565b6040516101609190611d2f565b60405180910390f35b610183600480360381019061017e9190611d87565b6104f3565b6040516101909190611df5565b60405180910390f35b6101b360048036038101906101ae9190611e3c565b610539565b005b6101cf60048036038101906101ca9190611e7c565b610651565b005b6101eb60048036038101906101e69190611e7c565b6106b1565b005b61020760048036038101906102029190611d87565b6106d1565b005b610223600480360381019061021e9190611d87565b61072d565b6040516102309190611df5565b60405180910390f35b610253600480360381019061024e9190611ecf565b6107b4565b6040516102609190611f0b565b60405180910390f35b61027161086c565b005b61027b610880565b6040516102889190611df5565b60405180910390f35b6102996108aa565b6040516102a69190611d2f565b60405180910390f35b6102c960048036038101906102c49190611e3c565b61093c565b005b6102e560048036038101906102e09190611f52565b610952565b005b61030160048036038101906102fc91906120c7565b610968565b005b61031d60048036038101906103189190611d87565b6109ca565b60405161032a9190611d2f565b60405180910390f35b61034d6004803603810190610348919061214a565b610a32565b60405161035a9190611c7b565b60405180910390f35b61037d60048036038101906103789190611ecf565b610ac6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045a575061045982610b4a565b5b9050919050565b606060008054610470906121b9565b80601f016020809104026020016040519081016040528092919081815260200182805461049c906121b9565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b60006104fe82610bb4565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105448261072d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac9061225d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105d4610bff565b73ffffffffffffffffffffffffffffffffffffffff1614806106035750610602816105fd610bff565b610a32565b5b610642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610639906122ef565b60405180910390fd5b61064c8383610c07565b505050565b61066261065c610bff565b82610cc0565b6106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890612381565b60405180910390fd5b6106ac838383610d55565b505050565b6106cc83838360405180602001604052806000815250610968565b505050565b6106e26106dc610bff565b82610cc0565b610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071890612381565b60405180910390fd5b61072a8161104f565b50565b6000806107398361119d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a2906123ed565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c9061247f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108746111da565b61087e6000611258565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546108b9906121b9565b80601f01602080910402602001604051908101604052809291908181526020018280546108e5906121b9565b80156109325780601f1061090757610100808354040283529160200191610932565b820191906000526020600020905b81548152906001019060200180831161091557829003601f168201915b5050505050905090565b6109446111da565b61094e828261131e565b5050565b61096461095d610bff565b838361133c565b5050565b610979610973610bff565b83610cc0565b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90612381565b60405180910390fd5b6109c4848484846114a9565b50505050565b60606109d582610bb4565b60006109df611505565b905060008151116109ff5760405180602001604052806000815250610a2a565b80610a098461151c565b604051602001610a1a9291906124db565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ace6111da565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590612571565b60405180910390fd5b610b4781611258565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bbd816115f4565b610bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf3906123ed565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610c7a8361072d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610ccc8361072d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d0e5750610d0d8185610a32565b5b80610d4c57508373ffffffffffffffffffffffffffffffffffffffff16610d34846104f3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610d758261072d565b73ffffffffffffffffffffffffffffffffffffffff1614610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290612603565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3290612695565b60405180910390fd5b610e488383836001611635565b8273ffffffffffffffffffffffffffffffffffffffff16610e688261072d565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590612603565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461104a838383600161163b565b505050565b600061105a8261072d565b905061106a816000846001611635565b6110738261072d565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461119981600084600161163b565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6111e2610bff565b73ffffffffffffffffffffffffffffffffffffffff16611200610880565b73ffffffffffffffffffffffffffffffffffffffff1614611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d90612701565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611338828260405180602001604052806000815250611641565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a29061276d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161149c9190611c7b565b60405180910390a3505050565b6114b4848484610d55565b6114c08484848461169c565b6114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906127ff565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000600161152b84611833565b01905060008167ffffffffffffffff81111561154a57611549611f9c565b5b6040519080825280601f01601f19166020018201604052801561157c5781602001600182028036833780820191505090505b509050600082602001820190505b6001156115e9578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816115d3576115d261281f565b5b04945060008514156115e4576115e9565b61158a565b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166116168361119d565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b61164b8383611986565b611658600084848461169c565b611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e906127ff565b60405180910390fd5b505050565b60006116bd8473ffffffffffffffffffffffffffffffffffffffff16611ba4565b15611826578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026116e6610bff565b8786866040518563ffffffff1660e01b815260040161170894939291906128a3565b602060405180830381600087803b15801561172257600080fd5b505af192505050801561175357506040513d601f19601f820116820180604052508101906117509190612904565b60015b6117d6573d8060008114611783576040519150601f19603f3d011682016040523d82523d6000602084013e611788565b606091505b506000815114156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906127ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061182b565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611891577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816118875761188661281f565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106118ce576d04ee2d6d415b85acef810000000083816118c4576118c361281f565b5b0492506020810190505b662386f26fc1000083106118fd57662386f26fc1000083816118f3576118f261281f565b5b0492506010810190505b6305f5e1008310611926576305f5e100838161191c5761191b61281f565b5b0492506008810190505b612710831061194b5761271083816119415761194061281f565b5b0492506004810190505b6064831061196e57606483816119645761196361281f565b5b0492506002810190505b600a831061197d576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed9061297d565b60405180910390fd5b6119ff816115f4565b15611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906129e9565b60405180910390fd5b611a4d600083836001611635565b611a56816115f4565b15611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906129e9565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ba060008383600161163b565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c1081611bdb565b8114611c1b57600080fd5b50565b600081359050611c2d81611c07565b92915050565b600060208284031215611c4957611c48611bd1565b5b6000611c5784828501611c1e565b91505092915050565b60008115159050919050565b611c7581611c60565b82525050565b6000602082019050611c906000830184611c6c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611cd0578082015181840152602081019050611cb5565b83811115611cdf576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d0182611c96565b611d0b8185611ca1565b9350611d1b818560208601611cb2565b611d2481611ce5565b840191505092915050565b60006020820190508181036000830152611d498184611cf6565b905092915050565b6000819050919050565b611d6481611d51565b8114611d6f57600080fd5b50565b600081359050611d8181611d5b565b92915050565b600060208284031215611d9d57611d9c611bd1565b5b6000611dab84828501611d72565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ddf82611db4565b9050919050565b611def81611dd4565b82525050565b6000602082019050611e0a6000830184611de6565b92915050565b611e1981611dd4565b8114611e2457600080fd5b50565b600081359050611e3681611e10565b92915050565b60008060408385031215611e5357611e52611bd1565b5b6000611e6185828601611e27565b9250506020611e7285828601611d72565b9150509250929050565b600080600060608486031215611e9557611e94611bd1565b5b6000611ea386828701611e27565b9350506020611eb486828701611e27565b9250506040611ec586828701611d72565b9150509250925092565b600060208284031215611ee557611ee4611bd1565b5b6000611ef384828501611e27565b91505092915050565b611f0581611d51565b82525050565b6000602082019050611f206000830184611efc565b92915050565b611f2f81611c60565b8114611f3a57600080fd5b50565b600081359050611f4c81611f26565b92915050565b60008060408385031215611f6957611f68611bd1565b5b6000611f7785828601611e27565b9250506020611f8885828601611f3d565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fd482611ce5565b810181811067ffffffffffffffff82111715611ff357611ff2611f9c565b5b80604052505050565b6000612006611bc7565b90506120128282611fcb565b919050565b600067ffffffffffffffff82111561203257612031611f9c565b5b61203b82611ce5565b9050602081019050919050565b82818337600083830152505050565b600061206a61206584612017565b611ffc565b90508281526020810184848401111561208657612085611f97565b5b612091848285612048565b509392505050565b600082601f8301126120ae576120ad611f92565b5b81356120be848260208601612057565b91505092915050565b600080600080608085870312156120e1576120e0611bd1565b5b60006120ef87828801611e27565b945050602061210087828801611e27565b935050604061211187828801611d72565b925050606085013567ffffffffffffffff81111561213257612131611bd6565b5b61213e87828801612099565b91505092959194509250565b6000806040838503121561216157612160611bd1565b5b600061216f85828601611e27565b925050602061218085828601611e27565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121d157607f821691505b602082108114156121e5576121e461218a565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612247602183611ca1565b9150612252826121eb565b604082019050919050565b600060208201905081810360008301526122768161223a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006122d9603d83611ca1565b91506122e48261227d565b604082019050919050565b60006020820190508181036000830152612308816122cc565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b600061236b602d83611ca1565b91506123768261230f565b604082019050919050565b6000602082019050818103600083015261239a8161235e565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006123d7601883611ca1565b91506123e2826123a1565b602082019050919050565b60006020820190508181036000830152612406816123ca565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612469602983611ca1565b91506124748261240d565b604082019050919050565b600060208201905081810360008301526124988161245c565b9050919050565b600081905092915050565b60006124b582611c96565b6124bf818561249f565b93506124cf818560208601611cb2565b80840191505092915050565b60006124e782856124aa565b91506124f382846124aa565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061255b602683611ca1565b9150612566826124ff565b604082019050919050565b6000602082019050818103600083015261258a8161254e565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006125ed602583611ca1565b91506125f882612591565b604082019050919050565b6000602082019050818103600083015261261c816125e0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061267f602483611ca1565b915061268a82612623565b604082019050919050565b600060208201905081810360008301526126ae81612672565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006126eb602083611ca1565b91506126f6826126b5565b602082019050919050565b6000602082019050818103600083015261271a816126de565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612757601983611ca1565b915061276282612721565b602082019050919050565b600060208201905081810360008301526127868161274a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006127e9603283611ca1565b91506127f48261278d565b604082019050919050565b60006020820190508181036000830152612818816127dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006128758261284e565b61287f8185612859565b935061288f818560208601611cb2565b61289881611ce5565b840191505092915050565b60006080820190506128b86000830187611de6565b6128c56020830186611de6565b6128d26040830185611efc565b81810360608301526128e4818461286a565b905095945050505050565b6000815190506128fe81611c07565b92915050565b60006020828403121561291a57612919611bd1565b5b6000612928848285016128ef565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612967602083611ca1565b915061297282612931565b602082019050919050565b600060208201905081810360008301526129968161295a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006129d3601c83611ca1565b91506129de8261299d565b602082019050919050565b60006020820190508181036000830152612a02816129c6565b905091905056fea2646970667358221220d487d4a5cd38e6efa0b0bfac7a46d07f4499111844078ff0839b793fb8452e5564736f6c63430008090033