Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add kubectl-minio plugin #188

Merged
merged 4 commits into from
Aug 20, 2020
Merged

Add kubectl-minio plugin #188

merged 4 commits into from
Aug 20, 2020

Conversation

nitisht
Copy link
Contributor

@nitisht nitisht commented Jul 23, 2020

No description provided.

@nitisht
Copy link
Contributor Author

nitisht commented Jul 27, 2020

This is ready for review now.

kubectl-minio/static/crd.yaml Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-operator-create.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-operator-create.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-operator-create.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-operator-create.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-tenant-upgrade.go Show resolved Hide resolved
kubectl-minio/cmd/helpers/constants.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/resources/tenant.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/resources/tenant.go Outdated Show resolved Hide resolved
kubectl-minio/main.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/helpers/constants.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/helpers/constants.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/helpers/constants.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/helpers/constants.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/resources/tenant.go Outdated Show resolved Hide resolved
@kannappanr kannappanr requested review from Alevsk and wlan0 August 1, 2020 00:28
"github.com/markbates/pkger/pkging/mem"
)

var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd6993a2caf637fa554e54dc77b7f716b0ec5df6bbc62e51cbb25b2d999ef8c7091228a04c8623a0e213e7bbdfc881495140dd7b9fffb9f582ee1292213357ae5cc36fadf57f1f1cefdd0f1fbefddf07cb89ec18fcaefb6ec7753cc7efac6360ea11fc0dff422d7e389b876f0fffcfe8e7eb73c7f23be146ef9cdc84fffdcd0fcc8d16f99ba3677c7918bb81bf897e6991fdf0adee8d5f1e669a6b3e7c7b7035c77bf8f2f0c3d71fbe3d3c7c7978d3369619a14f117efefafe36ea00c73bb977e1fbd1ad5ffbaa45bafdf0edff3cfcfef03f5f1e969106cd876fd12636e98f85a985bef7f0edc1f3a37f385e1869109ac63f401cfd43db6a0ed40034ffe178ff00b1038d7fe89a6e9b0f5f1e047fe8403344cf453dfbdd42af0ad69669a03fff271d24dca0f8c5da660db4c80c3ba8ede6e1cb858be85fc7b33aaee91eb53b1de78eee1a0f5f1ed64fe1efe807747edbc45ee4b8267a48c7323d73e3e83a74fc20727c2fcc9baea16f3d7c79f043f4cd3fcc007f3088dff1d0812432515bdd77838d19869d77a84566f184757082e2ef037400feed459ae3999b8e6d6a41e90474c2889e30f7f8af4d12447ef6474723af243f7427b0f130d1df46f1a2116af90f532fff34b85e8fed9f9ce8385e646e3c0d764c63a76d8cf0b819844e10397a7ec676b5c2afecf68de61971e4c08a4b610c2268e6175ca397ff40f7157ee98f851fc50e84b6c6967e71bdafa5df3d962bfc3e7a65040be3b4ef31fdf2af4eb076f60f5f1e0c2dd280169a9df05fb0636c9c2d1e6bd3d37dc3f1acc29f1d2df4d8e26f74d7d7c7d219c7d33649f18c1e6e8b3f2d1f147fdae6bef8f3032dc2c2ef00537df673efa29136371b7f837af60e35f479ef6e545e1abf6273b376229f77fc4e106f4c08cf5f8f37d00cf5f2752dd4c2b5b97574bb63f95b0d3a06e229e53686b635750b35f82d0ccc5d07fd73d4c2da381f1adc6a9d8f5df41b660dc5ab7118391ebadd8e5dcd730e66f9bae93afa1a9a0e6ab131c3e83d86b50d3a6419171b6d352fb0f7785c7f0b300f2c5db76cdf08c34ea2b9474fb7fcdfa06f6dd013372757fcc0f4b4c0e96413517d19bd34f0f182b8d86663be9b1bd3d3cdb3adc2c0d4cf5f8c36271450bcbcd3ac938b61a4e9eb0efef7f81a88dfdf35e8776c7373f24196df09367e84da903f2e3508fd4db4369393f1811a22ec8b8f396a12258159f718dca6a37949a37646bcd1d01ed0a831da41c2487383e3d6be05cd0e8836e6c940e12b96ff1e1f0e5597b4c0093b96e78791a3777e06a6f7fdd778cbd5b6441b8c034fa9e9a4a1b98f4c2fa47b5cb1e9c6b43e7ccf0c3b761405e92e7eb941c770c2754553c735b40d123ccccdf1dafe300d07301122b460634651d28990fc50db886c85c53668d93a1195698e5f031dcb72a2083d7cb7714e5699ab397013774c2d4cd0733a88b0ebda7c40735fdba6fa652d449ad3a575dc22db455d2d081b368db4b5e97b9dcaa6b61968777a4ce7dd819179ccf6aaa5b646929de902d3b85206ac6e1746867ff27d5184779b4dec993bc788eca6d2647da38e6dc2e07444ce34de98a11f6ff463865694e22dbfb3fd03cbacfac6344c2f7234d8a879d845c258b3a666d4a899637927e49cb7c46db4b87a34f31620d6d766d4097ce8e8498ba61dddf70ce794511fdf8458d4e516a6b7bddcc0d1dc46dfe76a86ebd47c8e77616c718368a31deff6c74d760e34746d534981999687471f317e7cfe77d7f17e77fcf67774b66ced4d3a744c2fa2ff8566d4d99a1bb4c39c2cdd36b77642dd36ddca9168fa04b4451b4d7a439487df42e7745547ba6d42886559db774dc33921f8b40562c7d126d6a3f88483fb86b9f1d0cad17d4f8f371bd33b2682acc5c67c87a61e71c7d7bd48f3b47798781e12cda2a375ece9bb8ee16c4c3d3a9ee3c08ccc0df0e38de57b782d1cd13a5e0015b26a68eaf1c6fc0d0d0e5ef497afa2ffa8ae576c653b1b3fee587e10a28b1d3d882f37385dabc72d6c3f8c2eb7c8362bdd77dd63e670dcf864d7386e70b25c8f1b041b5f37c3e3c10bded96e47f7c146abba1050e5ccf27f777dcff20df0bbbfb13af8efdf8892d90144dbab6b82ffd17d83e8004d1ae7068e46cd37bba62dd16a6bd236d838ae1339dbbac67bdc7c4f7b48d694dfd1c8fcfb1dc3275dee04da2624db90df0975cdf3d21f91bf36c91822d11dbf60df496d28683d70672e02a8ad4d0e9cb9aadb9a6e6b1c537339f061c27699de9966a7b690aa56350f0943bb13991bd7f13478dcc433a30eb52175f4688f64f6aa26e83cfec78a0953a96a703250d9858e1d503df1f8b263785ad5f92006d0d1c3f8fd1d1b584ad77d242e9cbc8c9ccd46ecf87298842967393e9d0d72ec85dabb699b9a4189e3a861ec9d7e0c1eb982a5e7fcc5b39f56ddaae360b9eddd39fd96f20db1e7a0a55dd928ef5af4fe74f1fd48aa3d99597c8570f10e700c67139fd2206e136d342f7cf7376ee555fa85f811171b78e79e90c9dba52b8e6b7636c4924a54d8df0bd7331d3c3785a133a98ad8b4fdced9d43c3f1b63c30c756a4769d8da0fe86a6ad23ca226cf26adb33e18e6fb96ce788bbb5c330c35cba4127e9b3b23ba65b5b9a57646f27b3211a441e377c78446e86f9a3efcdd81a6412d990d9b679b5983e650b39a7eb9657a4ed39976dca0e9f422d1b3f970041bcd72b5868d9b534a18359e402aa25f6e9d59ffce37a1c23239417fb4bac372c2089be42fdd92fa89d009e79d6a674ddbd74e22b123ae3d7fe775342f0940f3e6a9a5b2cd3d99c192de14acaddf1dafe378efbf6f99f219e777a22da56712cd85bf6353a4ad8536fdafa319d0dc74d3b31d7da3e73fdeb1666d47d8829ecd3e4822538356f114d9bff325e546949eb353503b241bd332f741f1ac6746a9be9c9df343cc4c8aa7021f96bee0f8164a15d0894aa743c7b3a0f90e1dcb2e7d4b9884ba06612a35e4e631338c889b016b618edfc9b422ea4cd402a7a319ae1322f2a7e487a79028a60d5a0133d28e9b0641787a3f3979be39bac21d5d890d273a7a9f0603fbe40971642309463ff3e9c797ab3e228e6c7fe31cce3fa178b5fa013e9a05b4cf54dc9e5fe3ea6ee62a460268916e9f3c373d5bf1447a89ab1a2edddc20694fc7c6c8cabb75dfdf188e573d1847172b6fdf9827b7194ea8fb5b73939c99c4e2f58a679a5bd38bce7c6eee42a8befe0efd1d523d363e3cf372cf8c76fe665d3579a54b150ff7903879e6a9e452c54dd46458796d0334fde42be8c9aab7d04b154f0a75db34e24a922c5daa7a6aa941d5b3cd28723c2b3c777be46f34eb940af2f397ef3a7d633ec9bf6981139a9bad593011961a5c7bdff1d7b6bbb5c5279fd808b3bf6ebd3fb752def61862aabc6e745a3ff674e45c4db71d0f31033adc1df35fb1069d28a96b96caed971ab966a4d534493d1f35cd28e080c88e171a86f89dc72378be5927f632dbad71cd3da51f153471e1318dfaa4fb5e2e34d737eafc2b363749a06d34f7d2e41045ea4203a801135e6a4085ddfa1664a15c2283aca1b97134e81cb075a479e3141fd3e28e54406e77d7c6d47dcb6bff7d61b4313597d8925adc4667f4f27da109b1edffd200a4488973d789891efad89c77b151012171b15d2d73c0adde379a7b712c53b37e18d5b6aaa1016af3df58668af7b9d8d2ab9bae828be06293fa55829b8566543b5a5834372d476fd48346bce5a825e10a75ed779a53db6d0a9d3ad7a69ea1ed2ef431b29d8df1cf40db4449e7dddfac4d23c5e85c2082f337e5d683f610d1e3a6eb388c7c97c0d6ea9a74d64fa161064d9e9636457cfeddb15c2dd03c2334f58d79e1b34fef5ea75b55ab9bb66d5a6746e3e2ba6e755b879a18aebaf76869d4df5cc4319eb929d86035ffc23c9d8a30440efbcdf27365ebe2c50e865219a91bf4b4618238925e75691d0373e39991195ebe7a22af5636a26263ada1e28a9b8f64cf4b4f38366bd4b76dfdf023d5ffd20d0d6c23176f3f6b326973578b0e9e35b0b4b8a9d5eb2acd314d6f39b6d2b4baafd90c9eda741a346efe59e72c40176eb96c18ba74e3397b51f37bdabcecc8ba74a1ed25a353c3db9a7fd83913d5a55b2ea8c1176ebb6cd0ba70e3193b57d33b9a7fe119ab58fd1dcd5f71ce8676e19613d35a7ddb163da836c45db8e18c7daee91d2d3eed9235efd26de78d7c97eeaab0fd356a7ed53bcef626336c9053e5bdabf50d173fafeece8bdf78a276142ec3d872bca2510d3dba63eecd4aa16b6386d1b9f3c7ba4bf9aaab05c1916c4caf9ed75022d30d6874d9e95dbe0fc3146c7be62af97d1c0657dd048d6ec3661df44dd5e350d5ba9a48494bd78c368e5e29c19206c56898d32648030888dbf0e422316e98972efa9eb7f1a3b3d44a6c15f94670b64d0e13adbe8e437fb4ea99c20dd66652f61a1e5d47fbc3bf62332e8c020d522cfcea6c0b52115ace59d00fb114526ce4b90629b6117be069238c1fc74e7cab48bbe4741ecc443ec5253d44ff758063e57f621307fe9ba25e5c621941ff75dc18460e22fef4c4bf623f320dac7cd13011626e490168853f9184b376cc0f6d533c89fe495dc4a5937488b373050c153ae76ad9e5c8dc47e950a0dff106928050f44fca1cfcb0131318229d5bf41f8692d0dfb981217363933f3a61e245da1efdcecc44a95ea963e06dfacb30416c157e678e670de9b37ad5153a0d27e7431c7b153a56f87b4602a9569c1288e619610707f5d634f5c248f3a2cb0f34f781e651be7bbed5bba6473ed6922fb4b9fc220bdba52e5cdfae2f5e77def5baeb47f68d0b6d5dcd322fb72801a02e36853e452f9e6f921a3e6a5a34fefe8d193a97277f63862e8e5fbed824b58b9c6f149160f78b4df28fbe4c01c586d456d6b67dc730dfb518464deea666f5628bdc15f41bb636ff6638efef9d6db7b3d5607c3c10d44a4a012f61b4d17d0c9b09a30d9205d15f89a7d3fff2a54e41280f5f1e084e33970e4abf093c1a9d259c25c794a6d0cc387a67bf967f3fe19fa1f68eda6d4dcfc0117617a1d00d5a15c0cc975ae3ff4012d5bd3b6b97865e5f6a1c6fb6661ac87ea19dbd36de2fb738c56d5f685cd363b499185e880e8acbbcd0f018a85ddb2ed8f8fba4a6618edf3ed78ac2b8ab2ee7c0ebaaab6710c6679b1681c6671b1de18d6bdb61d8f1ff7c797833c3284b48e1c5109253590a0a72ead537d0477efbbf0f4d5377bc6a8e97e6cab843de10c17ff58d9b1ed2c11115067e9648159d6f0fecef6cf7e1dffffef79787773204757950bee1202347efe8300e2373f3dbc687e6ef98537d23c954d0ff8619690ec48ff3480e93d3e688d71dcc876f2cd77bfcf2e022d6f3edb1fb15fff94fcc93be3d700cc7fcc63cfdc6b06f2cf7adc77eeb757f7ffa83619fbeb2fddeffcbf4be75118771c27f22b1fadbbb064313f33f9cadc5dc3e7cfbfab5cb7cfdf230f6fc876f4fdc1f8ffd3ffef8f230838eb77ef8c6e279351fbe75bb1cf3f8e561e5180fdf588661be3c08f99ff23fff196806f3f08df9f2b030d033992f0fcbc297f3704d3af2c8f4bfa29fbebe0e1fbe3d7d79f81e392efa92a5a93f7c637bfdafdcd7af3db6fbe56116a2334f5fbfb24fbd478ef9f79787d79aa6699ffffde561d0bca9fccf7fc65e1c9ac6c3b7ffc37c61be30ff83a7da3637f748674329e138ab4d9eb726bb7e9ab9264f5093a799214b8d6699a173594e33534c1e435a1fad539285255fc69f2b9b6a1da87f6bab45cea1f3cbfcdf24f7c9c3b70745e603d115139d835bf0e15bba3bb195a4671bf2c207dd4960ba434693faf1d40d1ff5a41780a4cfbdce838d26f5d63f1dfe0718890743109395db0fd57910a9f2c2568521a3bcf92fe3011f2b120b7f3a7ca449e85e76ab0b62a2c88badeeb009e0f670e04d582088879f966f8d078c85be67d19d6c0d99a7e7bea3231a0fc6cec0417ff3892acfb6863cf950e5d7afe4dc777c2f7087912acf768a3483faae70ef680695ee041aa3d7177ace9a2ef91de01687e2fd3a2726860bd1738beda0e18a7176ef4885ba3b297f9b6040e37bf17d866d0833bff86cf47e455ec0d2f70af050ba4f584020888c3aaf190b61b8d3b3ef99409debb3ba3b83fac12f7ef7c110868c2aa92c18cd8efbbe56653e045d18a9528f49c7ca70c544f1ca63aa7222d3ba1f23fea4ff06376414ce2a7e03ab0b0bdb1056e5ef92f6909ec3fdd4564602bae2eea86f8e222f3e34fa4edd150fa02b260a271e8d53b055bc16f326cc12551ad2f14fcfed03bd3b2fd14df1dde7e6db90f9f5f138a98218aaf4dc74c9dbba0047badb67f55179ccc7682ebd45a0baf0033d434f7a9b9fa3d758939e6ad7c0c9bd1cf4800b63b53b81ba2c42bdbb388c4beb0a3d63c268921a28dc9051e559a072bd00b846a2ca435695678c9ef46d7dc427a0abda60302e8cc57747416b4680ae26cd6c43100f9a64c49ad4f37457dc1b92783046af5bbdbbb08d9198bdb78aceaac6ab8ad68ee9b1e9981e7f67c6cf762734f413f1ac237adb18d204ea6e0f927be176caeda1ca0d3fcc25cb02378a41d788ebe686cc85985c5a6f8accef74b7cf95687084e6e4b16e4d501edb8b34e911d14a0d7ff8eebc38e3f36b6330fed7b88e270b6c009cca313cf3acea3e8f1ddfc136351c3a9f6d73f94686f7c0a632edc66822caa6ad5209b6ffd8edb38d455896fbbdcf3cf6388e65be5e27c2f6ef27c2d24f3f23c3b27dae5a8a7dfc834be5cd3ec3f438eea9df3d23c5969ad26e9f9162cf34fd94623fa5d85ba5d874c9e6c2ebc061a229629488298a2ad4bd5900b8c7aff8b7243e1a821863c1d67b8db5834d187757d92baec8286fcf4840cd0459439e3180639719f35e2da0eac2589317e899a8ed9170fb1dbd37066e9f51709b5e81e9f11f80eb31badb0f81202653c980c0e9e14d44f1c400080ba83b449856e5c90109d83f9defbe2a889c2aed02ba917ce8ae681b02dc02b80800da4c8561a4fff02de08921a00208167adf7c0bf55541c21cde008e3702fea00be247fa7d2a66e6dfbf62068ec6c42d337222481798b41005c09d7f1d0f1710b8c338179af8509367cc9283b1fac3b744fa0d6f258190df81919828d2eeeb7844ef2f08a33a676f756f51b5e932aad4b381372fb445828c182af2387f562a0472b3ad2eacbe8e9f7b361a2b5d187ea812bd77346315af7a234c85939f0effc7fb3cdda486a1262dc8d87fe46d419787603d9c2f45e5b0e266be2ab17661a3b39000af73b344937986cc29bfa27db034f9d55296641e52610bb5190bea5677787bfccc06600d7f1537ec7c93fc6ee9a309569e0c0196be9fd26189fe8bf7557fd7776f2ef2934cf17390e0ad06c0150fe3d1c257977c4697aa3447638bfb3a16fa2eba8efaa2bbe20e6df8488150b23572f4de01bf551dde060ebf55dc002add793c1e2201157deb2b9e7b43daafc7c26c0bf0b9397aee07e08c589303a80ef883c2d9104843f45d5bfa6d21166c0b4279e17d01f0164850b3c180e71469cfaacb9da548bdf558606d73c927aa84bfc332a45ea24ab32d12764d575c8f47aa0d4622d49347eb4dea27ea920f80ab6e7f3abc6f8c1648d8da4e392330069930be55b87e046411f188de94437d58249a34610da19fe8497fadca2a0483fe4193f44891271f9a0019559a31863c81536eb8d3962ce2131c1a4334d668edaa83595180f44ee672b4e8613a1fcd181d09f63bbf745d236bf1646c54413c28dd49a08f1684470e8ca986c7051ec6c2335a070912dcd371c0748869518c0d01c66ac2339ab0b2566bf14d2c0ab94b741e1e4ebe13ad176ef22fd4dfd2b346af251a00d2b03746cf77c524a52dd59b6cc192bc4f957a6b5de807680d19820dc7c22cd424b1c0838a63336315970d8c11a6cf5401b10ce1291e3fcf6ce0f6b6c68077d44cf914d753879f0087ff81f80f789ed93ab78ac7cfec5677579626f55c70f02d6db4609042314dfa9e26cff3bd04cdb9841400c898cb3ee5f9d031e4c556f75eb7949f6f91e03f958689c2d98121881fc6484cd465dfd68575a470fd181b1804b24f0169fe618ce04e955f233c97a3f6340024915130ff7a3ee505e9bd42dfd15cf1e3781cc95a5fb068df2af136b2bed6aa3cfbd05db8a3bc31e3f9abc27d98a6c85ac5fc2ee371e9fe41d7b53a42cadbf884562ff23af21dc4b074f27d67687d38fbd004716d487ba8afd1feb0426d5c4dea419dd235def396985f15bf0dd18ea5b82bcb906750ada239f23d0c480af72d73beaf0bfdb5beabbe0fcff39b9fadbdd3b9c24a7ba0bbe2baa2afd158c07d39199ff4b9e9fa2b3fb72c0b349adb2e0f95840fd2b1d2c96f1774c7684fcbfb9a2980a7dfd4604eb12162cef563d5855ee3b97dc6068f1f80ebb99aa45b8ab40f41d7388c47e201ed6164df984163c043c29fc5c358d8071ab7b2e6887f4bfdf80dcffdaee29bc8f1d69d788ad4cb8da1031e1ac2aba5bafd84d279d98832affef6fa31208752fcaeb7f3ed10dd99320f7f3afcc1184d02e0ea67dbaa42eff0762cd7551c9abc80a0a64d9bf716dadaba37b1cd3363836405dd356ce0c2af549efe79698de303efa7ece1629b26ebaca2ad224f12455e57f7ab8687926f43f2c06c0b84d599b13c5d6f88f675ae1faaabd916b86aa076b1b11cd139961f09bdcda08168dfd52d4346bc1ea6b208b97789d7e5793ae84e6c5db0119d86648d8cd13ec7a8f2c455a4b2cc59f8d69deef67784c6c50be38df59e03e0f670c589487f612ecfdfa9bcace1bd831aecc97b394d5a203e6d036187e4014e93275be0b210cb04ee30d1a4a10304b4aed5ad5e430b4b467c1b0f899c4165f208c987d829e1ad2dd585100855b265dbb12007a85dc367f8dac0c0f49fcadc2a965d55a82359617049468d58c51513e08a8c2a13395515fa1f7a82e5930f55e6193de96f0d173b3ba091f4bba03b417ab037958dc010ac28dd37f4a48ff7593d79faa03a616d3fc6037ef5c62c7efd74785e15e616e82e7cbc8fa2fdd313c3b1a006aab45f2339bbe47c727644761dec2c4382eb5fc9259e72fdbaaede138b3429c6c6c7459e7bb26e97928279bbe1c2b52acdc9bac2f22bfe1f024f0d74b71f0324b722bd449e048a3409d5744d3f67bce2729fcfe886c747431e7ed28f85d4e34477981cc9eb96223d5e58772b2b6b7b563ecade1900aceb625dc9c6f29753a53716fbcc2748efc64e8dda3ea1f9c332517dbb4a5982c8868053a8ae21c6860b13c0f5b0a30ce946ba0b6dc5ddc3a9c3cf0c79c68c850944fad39ced4f16cfe24ff1190acb95b89cd6f005d2b7cb727cc5f8119db6013fa99adf099b7f3f9a63a473a912e209afd664604b7371f2feb61ece16cb35daff50ff1f756118ab82b86e329ee301cf621b4d2a278e26d070e1d640744ee56d7570793d68d2231efb86efc33a9722c118f118a2e70f6373c923d98fd3a4d9c539443c08ad5d6559f886b3f249f9503862fbc3f34fd66568b8e27a3aa07d774557952710b8e81b604c7978003c9e45fa0f959b2c8383992daff69d480f917a1f1a9a130eebae2bf4aee3b9d3bb303684e1e35898d9c0c1fa2eda676d5d10d7e311e6f10de807ada5674b15fa2ca697c11cf52d403c743298fbe27ab894991effb65a0553871fe6cf2fd315eedf808f555985757b73b19faa6cefd07c127e3a812a374c54610ff5ee2b599f9c0d119de80e19ef223f52653bc08e4ea19f34a4a31874e7f1f879015577c882d182e80d83b13375eaf7a176f230390c77181a9228e86e3faa9321c85c9cc84a6f54d72aea21e7d7d612e944c4b6d388370dbe5bf3128d8b07559a5b9aa4d06f5f61f9895c17237db4e835e3792df979bece5d4d32668acc4f55192e554969786ff5d8a9d21e2a98469e2d8d137b58ce427c9cea9f6fd270d7749cdaca84e56f8ba0d9889f5fec0fe603b81f54df0582f8610c6af6d693b969bb1f15bfa9f9be5b18b7d33d8a39da83737ec2a03d17742790d80b9fbe8e059b3146fce1a7f3b4d5baa2a3ca93582580890024fd35e066076ca37367501f2d0e530efb5b384d12bbd3aeb1d5dd08add5c8e020a30d586aa346ed880f619acc88fcdb661c48bf6e9581dbcd1be2270d65e6fbcd779fcc993b0c5bd17bb57d6ea74ab340f5d6277cbdb81e113f473aff15f3b151e5b50564f140edbfa9bfa3a15c933d27e5f30e40bab6348c1bdf7fd99677ee88307f68289314be2ff5b734dce7093dae5cd16dfe6d55f225e53b23ac57bb9a24862af101119948e8aff11e29f33bd09d307a52f0a92e7b78ad4d1bca42e4bb59680843a4bbdb53b7e0f75bee8a36f01808434795f687e9a0f43ee20f1086d4f7d266cd111bead4ed6d55810086a6e9390ffb3602851379859b6d0da9c750fb62e66b9cbaf656ef2e26ab56eb9c00fa0cf93546e3b814bf8768dd2af282d593de0e708bc96af41a4f1aaf8d5bf6ac1a7f634bba29f821735a497d8e44ae11302d0d79db102c2477b4e78fdd49608c161038580765547912e9097adf0eeb268a2c86d457648d3d653faed34b4fd6f72dbc94ae3f448b15bebbcbf79ec80273455ef805bb51ba0eb18f82c83df34ccf1a8f28ef75e105ffc6d9b9e457cf6b0cea22f3f7578d198fc1899a3c8155bece73c7341d0b42478def6b6c3b3af9c6144bf2a7f0d7a20f365b37d89f280cd1de96a07d00b8fb5e9bf55904f18d857d0024c860dbab3b2ff9545fb26bbd0f7db40af3b648cf66b7bab70edbbc170830d2e4c561ea8a3b4d1023559ed860c01e0ca19f289281f86b01904adf39ca41ad53978540ea27cdf74a82df51cbcf85ba60432061bc4aa477175bdd1d7a6a660f99b1ba3781c05b84e632dfc75469fe17f1dd82dd6c7d2f79bb688bcb00fbf9fa1a103f9fe1f64303db82dbcba6a04b789322ed88ae2a88b1e160ddf4d07cdcca6bb189cdf7f85005c869f26cab5fb4ef56d389b9eab758bbe4982e33790ce352544e6c688fc88ee8a67de592acedc2dcf7dd15197d2432d87fe2b2b65190d954d9de81ee25dff7595a2be25842b44f1dd956f6e396e3a923f947101344b7b263eb2fdd5df4f2f6e4bf0cc3ddf40d1a2f89ad4f21fddb59775ee49d2f0f7ae075c0f4e46518bc2c2d5f62a2d9825dcc17221bbcc87b003c31d21876240ef9a12cef7c891387f2f29a67af835f4943793b3d465654d65bd90078f30874c7514adf3f1d9ed13db1a13d948e53ee87bf9d3fb005bdc529e37e0af244ab75788dbdacd0b7bd21c14495e62dfac65cc4269c3baedcf70faa344b5479f1a7daa974ea5f2dd89677809b7b7a4278b8dee5ed367d6d8a4da8e82fd2ad6fd701b0bf2582e6b2a803d03e966c5abcabbbfd68ea7cb7de903edf9e2f21fddfc6b65001ae0bbe66d48fe6fafc8d745c87613a77fcf7f889cb87f8dc7f7e3bf8d65c5aacc7429fd104312136679505032ab78f5ee323dd33a4d8e456b2263e4662a0fe78facbf816c6b7e039ebd9e0761def8de2887be391e1ab32b52fa23534cce879ab3b3cc64222bed17a7c0496d5bb73e28b497d772dd75a86a571fb5b20883668aefb5cabdfa135fca7f2f776f7b4e9070d60add15fdabcbf119669f0ddd224d6566b6485535f398c905e46e43a18635f1fa6bf0ce3f923c5028d9f175b858b907e110009e95397ec04cdd7d8459ceb356386f449611f28dcf0b25e76ba1e97aacc879a34b3f5a480a5177a2c9026a8df684fc301c7140b3b5d88afd6aa8b31c8ae21eddf54797e71ef417a1390860cd125e687d74bdf97e1d3606c08a25785b14d8f33417b4dfa3c417d4af15918b723cf20de83f0ff858053a267879ac40606d527952ecf4eb9663a7b417623f84e6e4662332e8e411b3f23fdb651137cc970ad0a90eab3fb796b5dbe952ec964b48b317a92d1d087ce5ca527ff77e857fce3542ac936111abba9d44fa632d5a10fbe658c266c3dd6a3ca5e92d9c4d26b4ec6fb04d636051819126329128b6dff445e9f6d81ccb3461dbe8bbcb3a837a77866a8de2ecba53e74564f71cc1c6b036cdf623f00c7ee0c7901a772214e2a618bf89a6dbdada6a5ffa9c023ead7036fabc222487d8eabd6fa0a6f030ffe529bd97ea2363cb4f2be36f69a116f1ba305d4ddc7afe3e1a32f0fa2a7e972dd7919d829fd17d6821ffc4ae0d3cb70174b87efd14f91d9bc2cd7fecb309abead8cd5ea5934b4257c9238b4f7646bf1e96518c185c85cf3ece0e5eda9919fd41cb0e5407909c6c680ddea0e9beee55fc7a3456254c42c1c1f157ace32b7d356aebd00b8f75d7b055b433c7e86ee7858dcd3e0612cf4234d5e30aa34a776cde792fdbd912f5380cc896dec39e33101d185870c799ff848e413c880d19ac4617010e946ebe980df62bfb967047a23bd1fdb6f6cec0f93f9509558083c1af3e8b0997f3cc30cdd8cbd38c1b46f81348cb16d5fcae6282aca23f87c669b6ea0ab35c1e5b76cdbc0de14e5587ff18dd87ecef0bd667103892a2d0e75f8f90a79dc25328f1aa802a60756e756686d047a92daa4e69692ad17fc1e34e78122ed53b974751c735b311e992cf686712d93ae86e4bd2c7e95c6f63969fc329283173da4db68d22b4eeaa10a38decd06a3574b477cc15b5c8aadda02879f69526ff296105c27d275f5eec2d6bd05ab0f7847917af159fedc540e6c805ffaafb0bd0c17bf16cf4f5fc7cfc3b59af20c07d10ad2437634fe6171983a38998a94c6014f69ac3ca22b4d9a772eca020df7c0267a992af5b83bac0188feaf8d1d6947ffd56d6a6392fe04dcfd800f2eea4214d798ed4be7bfadb96fb211deefb4af6f799c651adf7bae7ff1f839b741294bfe87ccc0e7c5aab75aaed4c9421cd7d86a5bc5a835c3d557c4d18bc5f92860bef5e4fbfa65a8f22bd8ff395fb1c397256feb655c33d2979b6185314e03c9266a00ba989f129b0b923b2ed274e61b28caf1b5efbb0b8e7ec97f20be0c1a60d0d0fce275c5ed3982f72ef352b4d764781501c6d85799f29684ef6ad23ea418e558e16c1bb8585faa7d2ff6391c61d9c7a3590fc91ce6007dff23c5a2cf3e149987ea80ef6a185b53898baf7ddfd5b8798ae13747bc0d5c626bd15dd153e4c91acd733d1e12afb7ae2688d4ae4e723c14e60a9a02c4b80ed01d634cf7d4e19f5549b50d698fe4500624df9db1f35823835db1e6566a0238a6351f59511d95f2ed3a5ee2e9499a0fe231c3b5d7db7aee837b6feb5b530a98d72527f61ae386fe4c9cfb75b8fd76bec13f01d77e1d5ea4ad6feebf10c7fe57c88957f38e22cd5c8343afe02754973697277cf2471e7bf21df3474d46eba90d2efb567fda75b8f3b65889e6feb3f638734a2f8df11015ba568997d138edc2fae2b7ea0fb4cec59d2ef413bc971531e035391e8ee6eaafc795631cee2bda97d6ea0af38e303d9725a65d0d3f14aecf029a2f6b5ac0846b42ff603cc3f9b40227de14b752be8f3f348c7dbb0acf789478b8313f3fc5b3655880022de07c2f914273082d08ed515c343c8c474642ec766df0caf7c78d5fb9371531ccb7ecad7f0d4efc79385f16f289b588a9bb623f688d1b884ad8fb26fd6a6363ccbee94a1c7885beb9e2c490d87d78bb980fa0308f455d0f7d678c6dc505bb6a433a4b7da2441f2cfa7307767a2dc67edcbc6d0c243102dd49af784e95795f45f2873b0ca7f28c01dd89ad72aba67ca919ee7b7982513ff7dea0e17bb1beae74c504dbf3847d6f3c9ab1fa88dfea1ed2c1ea7421725c85abbb05e75d95ebaf60fb49ed36c57834aa437180dbb3585e2c62955ac563e1e740e0615d29d15bc4235ec90bd79aac063ad7afc855767e5e5bf801f1711b8efb3a5f7cf55c66b8af20f77bf5596384730ab8a03b8914795ecc5ff1a80bfd439607b3d9f8dc11b78d93a5a33d137dbbf932dc6dde074cf02bb1fcccbf98fb1afff5f2f614bc0f0a3880641dbc0c6cb04cf103d23a781f46b121b19bd4d7f93eb081ba128dab9ebd5c7726cd65f03be20a286fb806a75db52714e4fcd29e50d299ffdcb57885ae91d35993f16abfef5e85c3ae889728c65c9138620edb3a339f5a2e23f15b75601c088fa53a43a3befdcdb6955c76c8fa84e4599dca1a6301dbe8e2f180e4bc698325a5b67b4e91f6813a288c192736cb1741fa7aa56de0f6bdf3d85f91d9f8bdf9a53ca1150503165ba5fb8af3b4299cb83346af5bd05571acb02aeb5b83eb2738f63f61b18d792a513a47ed885f6f3ba6f69c36e37f2baeba354efaca78a5428cd84df1126d71d1d42ed3667fbc2e7f40c6bf265bc0eda1d248f7bc469f6968976ac94f5b6168ebf31c9ccd5ddaee7d0d724b0a380f7c02dc6138e7c4c448e9e0dc789ed2d4d01cd19cd224d7e85b86a548738d0acf18fbaa3b4477ce685098b17a77b1054bfec7fc3847e8055b14d1b7f8449355dba03c7a9ae646c4f60be293486329156912e2dccdc3c5eb2ac9e35291ee97e13286fc16adf31bf33bd6dbc51baf7f3a77777856338cce057a6b84cb29d2d13e50a51e73077a22b9acafa5abf3b95431bd0101623f58b9f8cd2aa478ec9dee424e911734eeead1120956081dacce657a21c65d0257b714daeff3189ae3c24525ecce1ce3df074cf4cb293d1f63e11519dbdc6343c0f7a23de89356afa655129bd102375317cbf10cb8d986e48ac5b122e7e6a6819c466340449e05c23ea5f9c6397297f8fde2dc90f6e12a8b813cfaee3ca60fad1b92ef3da7b71dbaf73c0da76381655e24bbe6eba4691ccb27e6ac7cfc2fc39c691762614ed74e345c119e89e35a744e6468bd04561fa445b9fa1b8ce5975fad3709c6cbd593b564d8b71bf91b3c2397b48ce33a231f0d781b08fbadd1c57a2f9aab84da13b25c5d4a573c18423faac16e54c93e95320e5d9f1e2ee086655f12534530c9fcdb8ad95df47bb6b2b536d50d5bea3394beee9abbb8a96d65ba247bde7df2205fde43489bd39830c2174feac964350270feed3f291e10addb9bf28e0b11d4d98cfe29d6f8b588993ec9cb4ef23747c3550d5d14642b7b2cb0367017b62160bf05d1c12f62d55bc5b235c4aefc176156fe32acca55750f6a31129f71ace7fad13006ab81cd81605b667788cfd807862bc6aa3c6b2123e4f78c877c02b8498a5b2ce5af0602e454a907f5ee6b5cce919e635c2fce39898980ea208d1bc218f12dc61cb9c300dcaeff07c0858c260dc38520868a0cd1786e815b13bf97e615fa41e2585f0f9730c82d7c6d231eea2edcaa4866e1fab15a13bffb67c5501b028c54a9cf1a7fe777345b0367e7efac2e7a3ac667c681a91a871bd6598ec16abecef27b4e74c2f45d25ac16bf53e419b6a519c293a54ac30f6d80f3e85c986bdb3606741f1ff1b6ee65fe5674ee72fc48b37ee3d8c58bb9204ff9f60c74711cc88e607a306f49ed2ed4afbfb25e86bcf4b27cb41647b8a52987fdc4c9391b7013595517faeb371acf87738f0ff92d10e0c7d9dcd6157824c0cdadd23306e8dc3e50ba6b9ae39cdfaa595d4ca4cf4f7ae321ce818af32aaf4ac5a12b79ca25bb44863399cb220318a45335b74bd03c598807f386bcd8625daaa04315ec7810b8245e6459929b7847b95c636cf5367c25b6bc01efe17dc24d6b48627b5e567c7b2c0cd358519bd65cf05579021bda0318459e6dd0ff60f49ac66812594dd8e398dea9f41c29dc9ed5bb8b0b7199cd30ab3a277e18f2243046f007da0b55d96e1ef388755531d1e4458fee97d01ccd8f6a808d535f2683635846138c9d0002dca84b3e31a41eafb3b8dd799b10d1530380f82fada5008474ec4546496eb503a98705adc9dace1634e1537d5c917614fbba276b4718866381140a473a9882633ff91d1048de3f40eb2915e395eb646d4d7ac4f630c0e13a9e5bc453d2bc9084b72159711802a1dfa57adfd49026100834879730f315a9e7a9cb34efa01163595c80bb1a9d669bc5418fd42d188911cd3fe7a84b7e6b7098c61d7359ca33ad03e7fb3ead9181de85d7c6b331590c883c55f34e27fdce059c91a2f283ef49fa3c444f2a07110f0ae87e7050e5b9f522f4a091209d6e8fc6b9c0ab606dbc1aa963918ea711e0f971e93849734bf1d6856f595bafc9238961c27b341be85d8283555c92b355776be2c09ffbcb0937b7880ec62746c22646c244d32563c90289e932a41eea57783a9fe4fb481c0cbb55058c9d477da8b1bbf4bb98d6383bd00714b327880990e081d66a26f80aa9d7cbe7fad169214f71b34671dff5729dead1b17ea6742bd6ec69e7f6062e5ddffc0f5abb25dfd7f23a948e2ad9b6e1c22dd5b3689d176c4bc434ae7b335f93bfd78c2ff1eda8f224d2e4d981f0a8cc569cc9028a2bba449f9f40b26764583124a31f346901b1cfb02ed686d6524bf1f8346e0de71d1e0b43c48f68ec4ebe6ed1bea0277c57132092b70afeca8c0fd6f47162137b7e9196ec2a5a0aa60e3f3106a9fe84c677650117c97aaa4bb02d9887e73987ebfce0c7fc6e346315ceb214f9f56bee77d865315c401aeed2fcc9aac4ee8c115c6bf2381e0fd3fc83b4ee700defc5f98707935f004eb6a0bb9869f22c52e4c58736a0758f06131e8c0cdb945f9d29c9cd1483eebc9423e218cb5763fb74e6d2beabc8f05017f7d7d896399ab0603dbc6eaf1b62fa1d2d57149be489715ef366919832bfd5d29c1fa73868a20773e2413fb75767f48c648157fc7caccf105b268e831c0bd01d8fc418f1fea9c3cf14798d648d03dd870e29166c5521d34c9def889fd6e4c3c1754a038064a6eec22fca3704c32b3e1a9467ae84febaf23dd93e826315ebde9763fac97b913ec8ea2e64cc552e4f19c210fb2ff4d1042a9cb8c631aa4b9a179ae843c5b16e63ffb91baf46f33597673f01d75b02aedfd6fe3b01ee82f82688be88fa74924f3d8de1c2b48765ec67b4ffc55319adc9ba5c4758c6247964480e9cb37b6a5e7f7e95c63c539f24927f262cf016c125ec0c1dbb2d9277f5ae98103906e79061c6c262aba6f1abe8590e6feb092fa275f53af8eeeb6e7f6b0cd634065cb5356947d61bb62dd5f5f174dd69926269f2dc52857e16274e650a1c4ba7bac350e756e158e86d535e5aaabf5f57db95ec3768fda13d0f63a049be1e5cefdd06a3d996c4f1666bab8ac6e3f100f3ccc359db60463b301e0b93ad215895eb9ceebf73c02daade1366b1d7381639c37404b5186df4de6a7ec0285284f6d39dee8a1f38a78b3bbb5ce3ab05168dae2b51e7aaea815f5c53584e1657f099ecff98d6d2386d46f7e00e70302ee61a2fad35a43b71336c0bad919b8fe2d4535fe5096fa3bea692fd27501d9e055eb1eda3f5260d6bf2a55e4557447f72fb48d6ae6adb44aebb86aeceee4975fa48155de5f1f6889f34ade399c526105efe436994b7b43ee7217f5057fb0078e2e31bc58f5ef6fb9ec93b3d9c0ddfd077c916a541b2aee8be6eeb233ec4f213e6a943c46f0a3c6e72a8c331a73caf302761a58c92cb1c545ec5baf407c1683d5bba3b8c55a11f15beb78666f23d9c62056d2cab1673c138df31bda377e91ca9754f6c25e7f8cda385f6b01ada6942ef648f413a46e57b76d40749e4e3baf735a1f7f168616b1c92d9f9449566380f55b17e22b69134ca93d33ebfa82aabb049dee70adf11345c31c4b8cf029d0241e45469679118e45d2ab3a4b44aebde2ffc46f1078dd771797d368b0f417c7c7f953f7ae5e27ae6c4d65ee8bb4ece870a929b06292fc2ba268d8b7a6a5c43b6f17c539ed82a0e81eeb3f579464ef74ef41e92f3efd95a31e2ab26f55893be7f2cec6d05d144b55dafde0643fad258662ff6a5310e469ec12675564ef53c5a939ed4667f5b50fe9eda72ffd3e9bdb98f1ec792667917c133b1d5b6ddbfe64b3ed4701deabe9bda7bb1edafb867a5f1ddf2e4406bea7f605f3491c92ee70ec339d8b05fac482f219183f35cc885f714db79447e8091224f7ac4f6da68ff3892c976c466436c6887a26d549116ebd47f876d86cd6592c010c4a81e2756f65dcf3e6a75a01679631bc42f907607539e7d18c2be2d9ee32dbd6f2cd85b20ccd19a2ad04b214e4d9a5b7a171e94ee222ce1bfebf4af2ceeed11db24b05d4f5ef8d84e92e6e2c0f9ad663d9d9b3100d70e9bf42ecb3f35394804365039a46be5fa2910862c7067fe451e5e9b9bef1c4fa2df3e286262703ea504603eccdb3ac6c12e521f5f6a0faaa195bfa7b63dc13413bc8799d6f1a9fbd632bdb6ac737de5370f89ec97d5bc49f19da375e6d36b53b3a1a9bc72ef9a0dd3542ffb1b6a3b181c443a435767689e24af069b526d779535a9b7263ed58c2f7f60dd17b5738d43267f65bc18e92f055eecd5eaf193535d7c976237d26f27be2abcf794732d4fbaafd7e8b8c5dc81872ccff33decb0757e84826e739b1df6e21ed72a378fcab1076555ca0b8ce329af91dd170cfb36af7816cdbf83f108740f18bd89331ec91299dfa6513e3a032aaebd055c68bd14b0a82aa28f91e84cddd9162c8fe270e559a0765fb7d99a48580fc833fba591cc08632014f144645e80b738147c0eb42fc57eef880f86d6e5c27eea66f199d9f3e6c59cc9a47e1f8d0121f964eeaeb70846a473c31fba8b690ce3c5707e34a6e1fe732a87d4f403a638f1f828b605dfd7488f2b3e9bda03884c2a1e2eaf91323f6dba47e4b891c9cf6bf1d6c4f6943f83d85c8c00b80b8219aaf17335dafb725a4db1a499fc7f9ae393fa8e0856e9c4a64263bf9ac8098d6cacd536a773f6a046f1d24d6dad8d6c4f8dc697e6042dfb59ef68ab6fbd7e1be2ce9b601147676a9937c7f4bda5f983e7d2ec036314a91caa657cf428e66078face8bbe6abcbe31ed2686f488b13f243f1bc137a5f156543729e07188ff4e178649ee8380873ce6f11ca6ab811d241fb78bbca10acf56bcaf88610547792856694ec0d4b757d489bb13883191e7b184a9ef16c7a4006fc6285896d8617f1d70fb31b5bb956dd602ccde93e5be1be47c43937a074318c697ea4e5e92971be14cbba2d3121bfb6648138a8b85b1cec1b5bae4a3225eb61c5b8f79ed1ac9ff4a77b1d5bdb5657036bc84a54a698cd48bc6f9b9717ec8f1738ab72032f1d8195b2f3467f03999a3c91898687eceea8b15b218c11805348e0ecffd3cc36f6279d3d364151662b53fc0483c18c239ec7dbdede494b6832d28e43e4d6b0f53d988d4045b66efd700d7bb10ebd05c6f562495f47d54972ba72ad65839aeb162abae8a31f466e6a3a16bb4803d44ba88cecd7c555ab05866ac8f2bfa005c0ff176b447337558a0b639e5484ed1a18bbe13ed4757e6927e2ed6dcc1cf5c96c6e3a07036544722c945319ab0595d8586797e0ab6a43f2defa84e63da906cbb1889788dad8a73c5400fb87d24bf3f239d0eb8c6d014907e47e8f8d67c4b395d8849ca4bd36fa2f1b51f9a20ae0d694fc6e26cbc45e598205e1c036e41d717da1770fcec41457c0cefb7391d60cc1f8e1b9a0588feaecef149ed79051c20d2a959a4431b033ec23829cede82ee0c52cccc3adfb7d400707b5c27a64d5e23c41fc6423f190b24075329e75da14f19feb7f84eccebd96dcbbc3f3b9afb29c1f2701e5712637f2db679e2bdc34bebde1803fe60480cf9364ec436cb76f5f3f960eaaee234afa222cdfcb1d0dbaa041764e3581649c4585f8cc52de7bf4534d4b6466d66fbc218f2d1abf552ca2797c638ccc362bc51e53a6a936bfc024d4e073c3484d7f865893195913e121952bf79c68225c67ca3bd88c4e3b6eb2ba38d265b4332fc4cbf12445cdb82ca8f441ea43a36c55f64b950c69e0135c9f08d41a3ba70c5f549f73d31227842a2f7a2353b1658db10667ed1c6a07b682cf82d70c97b81346414ce1e9ab81e08c1f7ea87b05dbfb3f5601f5ecab4eba33ea9f28ca1e38b73a0d2fa6a5b8c7d2bf0cf16f9db9af95acaf79cfaba703d1c76678cd6a5ef38a2770be73358f2041fdb92af606c0f5e4b69ae8bb4e6078cd2da6be3513af7df77e3814dd72864262457420c1276ab0f5ad712e7719c6d613f68d2378c9b13b25c712dc6171dd9b71f325dfccaefbfbe7e3c91e70ab55e5ad692afdc6bf9944fa6390c89be83c66e6729f2ec00b8598075245ad3a5f53b0bb695e3359af2fae6eb23a381ab649af258101eb2906db45fa538f8f6637a6e0d96fd8727639ce7aac07eed966bafd88f498f3edfd3138af5381bbf5cdb8f2bf84ff938f5a765720ccd95be407b7479ff1cf041ab9a1b2763f07c44bf65ac7556d306e7e925f55d1ad59c3cfb3eb2c70187c76b59911739d66f348140c8f0d1346718f6815c3da6590d20f9da79bd36776af581c6efaa3577894e88ff2cc52ae1fcb1457c79617e6f1847729471406d6a1b548deb75793cabe90af3349cefe4fee37b54338fe4e8453c2351a53dc19037899b6a7060bf268df3c0b236b6fd8a48c790687edb7cdd786df7e2aaf99cc0f1338ca703fe27e82e26c0d9590bd90e70de7b9c934d3cbcb97d869cbb9c77a3d1f16c3053ead77c1bddfabc2b73f6563f2be51337adef733225f5a1e3394ded6e595cd6adeb28c5ff523f76ba0eb0ccf50c63acc33ef7b60699e786d8bd1a3aa57439168689ee0e7bc5da43385e45a275cb489cd85dde8979b03b64487da4d78c4e49ff165b559e211a1ee23a7383363af0993e16fce718efe64d6c73c94706964d2630abcdf667f6b14b6258de8ef1f73867d4655c46e377cad88ee02bb24a30e01c8c556e8ffa47b183e8dd86af49339fda936ee73b24a735a3ca132443e2fad68a4cea9166987c27cb175a835d6bbc3603ccb365b457ce905cbe26f6371df35c6384d68de86912aeeb9434f3435e3e7401e9d2d6ad7cee66d932a3e96beb44547f57436c61ed73dae6a0ae3c9ad7163b7b7fbeb75e2d43b4af5b567964be53c25faf99276ac71168fef5ffedfa599647fe533ffbd4cfca6be5533f4b8f4ffdec533fbbe99d9ffad9a77e76e5f1a99f7dea67b7bdf7533ffbd4cf2edeffdfa39fb5ae35774427d4ffd75e96aac088d3678d85e141e7fa1f9a34c4eb9de66ca37e609c23ec4a1eca7f80ee2451e5d90e70bd35c90586f43af12dd39be002ea2e43623e69cd0992c7effb7efaf6bc7b6d518f3f3d5ae5c0bd4c2b57d4e46c5fafb040e7bbac069c3b6b84112fdcdb5525e86975b93eeeb4269ac6889569bf06d7f3e7e1e326591e981cb37962af388a956a164b93f5ad9cab0ecbef426f4b7202a3dff3326e13ad2952673dc376b6dfc3491e3612e39061ffd663a11fa7790aa81d25cd0de51fe12a8f31596dde5d8ae150080630c8ec3503fe43958687422ecdc238f42315e7fa84712bfe272c58ac8f26384fa8a5ca3654ba2289111fd870eaea316a43df69038767758c975e05d93877e101edd9adf080389e04e301919c89c7dc184d7a340f16a74a3dc690862118ad2d555603055dcff0a6bcabbb75754cca87262f0ee9bc35af0178bd2d04dbb2445a8b54e827a22026a0b5be55956323e38331b69961f91fe3df08266d94bf738cebcdb0b5f96e2ade8b319806f966aa37f797e89d2dbfff6a59aed23ee889385725ae592df38cb93cd767e69a7df51c462ba636a713ac658adfa4b8bb6bdec9bfad716d721a5bb6d8ea423f049cd15b6576acc94a95271195712c4d627719eef11a1b12d279baa243e2b7b2b8bd9f681c8fdff98987fac4437ddadb2fcecba7bdfdd3de7ee3f87edadb3feded8d9ff3696fffb4b7dfaf8f9ff6f64f7bfba7bdbdd1f1696f2f1f9f78a8523f3ef5b346effbd4cf3ef5b3745c3ff5b3e3e3533f6b737cea67e9f1a99f7dea6757bff3533ffbd4cfaefbae4ffdecfc98fcefc6435d8343b91aa3c39cf395b7c6cd34c9c37cf53d237eab3edf372717c6a71473e91ce50ed13d3144ed5e8455ac36951384d9762aedb7b836da92e6c421988920ade7a473383721f69d4f07fc57c0f5609ab707e7591ce15ab10ddfd767349c1b0bbdc33ebc2c9be521b92aff489a77c49b40f599e256d8e298191395eb6d8b58a84501cfd25c373893fbb590eb2babf19f7e13c9239fe55423589c76f6099c171fad85bca6dd41911781cea9bd0a9c112ce5144a5ad4262bf795d6e1cd73274d07bc63c8735c078ee074663ee0fa079cc7a99ccf8ad3a47ea8c88bda7a98473413ab4b8ce388484dd30c8770d4278a8b28bf13ede311e8365be7057acb73f4e47923718e438acd24b5ce682e4e9c3b09e77c42df46f3078d5e6b6a10970f6dd983539abf91d6e4a078155207064822c43a25ce4b988d41292fdf7518498abd1bd8682cb7863cf948f12baa3c433a58bee756aea35679b92ed0e4ce52e5c5c7d45993dcf232cf1ac28ac85b1283f16d1a1a6b5c17bd5d5f0dc14e4057f4b27993f6c7b89c226e0eeb9c8ab42078d9c124c5755eac535cb53e69be3616903cc985dc5c48867e4df3d9a6b572734c515a3fe308bbdb6a7e85fe7a9e612d21c6e8fc4c5ae7076b9f7b4cead33a34593ebde6326dc31a1ee57baa7331e639f9f27cc1791e419a8b4d9a67186c555acc01b7e033fa14afc086519e48eb7367f56bd0de359552bef464e19ca2e7c7abe53bf1737d3d6923cfde86bdaaa4ad3be0e18ff18aa7324f8a552fe1e5afc1d215e9fe14239fe5806b6f6fb929571af936629f1de632eeb576ca4a3f01adb185733d7a6b0b74b13c62d3ba1868ade4fb80dc6e0f3b5acb718ac956388c43c6324e7b9ce0bdc6951cd539166fd1974fe9b8f21d09ad7527ec8376b949abc6b6efe675e28a78d60cdf4f735d5299e8f8fc2df6f3cc163cfcb910dae489aca491f6fcbe2d9d9ff507de38071827fe4a6cf0b9cfedb876ea21b70bdec11646ec166143dfd87dec9ab96f2df731dc385ff75acbd93cdcc15746e8f14496c03eb23c1f305d73684c6eb63166635ce57fbbafff0c1ff7f48190a36083bed117428e93755cf4518c8e7c6b771a7f443b38a7bb2b8638cf30d73b6802dc91d892672bc7bedfcf07838fa16a0301ae8b7d4ce5c6a5f41816fc30c44fd13affeb391ac7bce3fefebabbdb8cbf5bd998df814754edd3b96f0ae7c88d731f55b3fa3b0dde99aeb5a27f368b853bf2e1dc677eabfd78e7fc7077a229126b071c96c6da3c9ef533de695cd335817d5e0ba10f7506f5577cd488cda2d4e73bbdf3925f8fd618b91e2355f1bebfdc07858f118f75e35bf7784217f791efd2e3eefce506ff45f5d8e5f1b5b7f6f9561f153998228fb90f06e74a3f51f5b36e5c2fd48ef38665fd9afab9b5cfcaeb1d2bd27e7e736c5a058ddd836e4f65a4f218a475c58134dc11b925c23a03e585fd1bfdb83b458209d22be74bfe80fa02849565724847d853bc0183ebb315ed6ce9b7ddf8ee489189ce45ecd1487ec2b8c634d638abf140f4e3cad8c0ebed19e41bba9a807d1b582f4863cdd1378d5d3406e3147b7107ff3039f0b3d7301e3b3b52d7ae1adb91d74bbd15eb25f463305a5b638fd62f75ced810a8ac3a5ff59edbc7fa56af8f363ed98ab9b9833f9dd4a8d4bbbcad70d7affbd3355aa8c52dbf16eb4e1d32bc4cb9cdd57358d4535767f5c9ef3eb55161bc92ca0d719db897b736b546ca4745bc35c566b350917a87f16052f02f1b87527f9757ee4d37cb1777d289efb09f19427f07b8fd56edc2a92ad7d5333bdb9f2a5f34922371be069db3b706ae77338125dfbf34b75e0a76f6463573abdf8fe69fe4c4e09e2220f43f481d8eefbe22f5186dc916fc7feba22ff56abaa33eb4e35c39d4feb77f2bd8e6724c43a1eedbf5b24769bd8659dde3a371c5fb15ad8ba7221de26adb2bae4b1b931c3efdb8506b2bdd93c89e50a823496da0d7f312323f14275ea24fabc03fa8cd13edb9c338cdb370fdb8f6e39c27e2e765fd49ed63c4a786e71deb48e9b85cafb3f043cab318d0e5b740e87be60adb3dd1f3093d4bfb10740dd8ac7edd051e713586fd36ecdbf4b86fadd7f88dfb6bea53bbe2db4ff6d3cc3fc7db7a77b6553848eabe8e8cc010ac9436694da566b57e8f0f85eb27586e14fab12aa4396f4efcc39f79b368deac1b7de75136a76df4caab75d2ebf0a8f9f864f9b1de8af89ba564c4a05bc0c930e2a32acd58ba17371e8f537f56a3dc514775aa27ade490630c8c4ef0f9587e43eb0ce3cb4a354017019056a9be83e50b83832168954f0ae7e7728a3826c4db01d7cb6ae9913dae684f2ce2016ef06b1ee71a5b1ed7049c41459e41e20740fb7a3e0e8063716e294deab5d255548a33a4184b58c8ad96e236511b98f91e30fe21f5f38a3b551832ea72dd4a87a518a49ede5d40525b6e8d6da604ab87c79fc1759085274b955508bc058bf63a73c943c3851f466bf98ce606f3265bb0e4036ca3a57328723624329898a8b4fe2090c5d010e00e947159edfb88fdea38c683c6828a87cafa6da89f045f7723cf22df4f63130e542e09c7c23a467dc5383d9a53ab18f3a27343469367a4e6f05f5c637191d7672ee23d302e633cb0b1ee8b747f43b0b73ab72aeea32df7fa429ce1b08c4f0002eabf4a689cd654a5f5a90bba37c633052df38751ff37c19c907c7e331f74313f7330ce276143c0cd88ac30b04bba085e136ebfa5ede1f499c05b0453a9a04b518cdd14db8e30dd97ee699b234d4ff8b52aa1efa675ee471316b83d523f947b24351e316ed4f0714d5eea43cb30a32de5be144751d4057e8df2dc634b4eecfd72cad84585c6242a522f8d9b6e89692bea00291fcc31af69cc63950ef097d5b53cb5b1dca9b665caef87ac2a4f7a63a1cfa9f2b814eb89e452d0151385130f57c558df0d9bf59f9fc3ad01160b8fe9adbaf2a5bc03699dea13ccb5304cdaaec7425fd37c807f97edac321f038d2d3f9f87e0a69c00c4b7f19987a0e6f84fcf432064b695a29d0abf8bee1f778ac92dc81ec270a70bfb80ccd5d37f523c794e572d74c46a5a3dd94f8a349ba832e68194f73ca7d8a7db63579b63a72cd11d86da5598edf291fbb527848f2e799c93e0cded33043f45b020b87efe4deb911c271893ff209f708a73b9fb3acd63daf17e099c0c0383f486bbe1081b60a3aca5f448e2dbe9fcde8e2dabf6a3d2187787c43c3e46b426fd1df25964369ce29a44e37a19cb74cbde858f8bf82fac93a67d1c0fb14c788f5c21782cb11ee68a3b200c3f54699edb3f705ee145827d431cfcb8796c0516eaae01ef855dd2e4056c9f7fbb92c6ee97b7e68e58a56bedbce583c1fbc72df7df039b7467ecc0f5f909ee8445c27187642fb5c1f04e72dc9de8f06fc31e8d785b9327687fe0c7a359005c235497fc1f58b6a77bd4fb32f7ef529def95e6d1be25566847fa84d70bda2b20f0e624f792f498db2b891d8dd8409ec5478c53efceb03c743dffbe026be4dc94e3cd594a8f4e9a73e94c4e9ba29eb505eebe371e4ca8df797cfd1e792667fe3de28c6ee60f37e21e813b8c5479b653a4d95538f6bf074b74164361eb233e24ef5a6cc703bb500761e861bae8ce839f57d51ae8b1384617c7bf637924ad5711a9d230d693ef8e9163593c3d29d98b5bc56693f7dd60ffb8dd977fd37e733356a832663acbfd71d0843e8b6be8b8ab0a1c4f56bfa7a57d9eae076a67afc01fc586b08e8acf4ffdf9592d97ab78f9f5d8a0638ccf55b82ece86fac93836b7e35ff94eecbf21fbeeaa10f79eda96c9b8527b4bc9967f437ed7b358a086989e6be696f8ae30ed66e3178f9f495cc671dfc85e8e7d9e3610f65b83bb665fb9c5f673358627ba659eaede03afc0355e992b29360498fb62df9a8c4da57f13ef958a2ba6bcecc41f77266f52c3b9486b5c0d39c0c1f578c4b3c628f52be738cb0cff3e9ad9404a310c3bcb74fb31fa1fe739694877384f08a9d7b545cfd4b1bf768efda38d9e71952db8988fe22fc6ba0ccb796d54794c7025d9378db1fc9dd75b23b5dbda613f16db0c2340fd95a95f9ee04056d6295ef5285fcd1db1268d7328b5c246a901e0f6b68165b31b7228b5c2f3a03eb15b9c0fe9861c4aad785b96e765f7ff9b1c4a273c4d38d239697eb697e5ce52b87ea48f4406d312c9eb83e82f3088ced8f6dd8c369a6c0dc94873a764313734cfce11868af8ce5481f0c8b197e236dbd87bf80c0b46e823b3a352d9c2b609df5d14f41f9adf27f3cb9de0805ae2994e70427f14bfe165f45a9655051bd16481a65bfa79c9b371deb2521ebb16bede6b6c98677831cd7f9562ab8638ce432ddb5a105f93693ba80ecbf90f718ec6963a0eb1772c52df0ea221f48e9d2a8f238a7b4774817485f5d9f16aadabd3bc58ade6ea161b5d256ddd439f5b66fc668063f5b05c52acbd8aeb3522fe20cf0e809b05582fb9c65655a2fb0abc1de5cf7f0fb6e40e181df22d97b00e7b431213a4d318ae9894fd9e13a8737d56776737e57fa1f224922f3f082615ebc2d7d69fb87d5cc9732aed9db7c5e09ed071e53b323bb3000f37e149d09acfb13f5761786ec411dc2d86f23e3eabbf01d343de1ba498d4426d562cb315e25a733ff1edefb3090685c6d4e2dc1fc55c33542720b88676f94aabdf87f74a6c6f2132d1ed181ff2dc3bade5ec799beb630fcb471bcccf9df26564f8dfa33a38259bf55df25adcd9af7b570c1079de290eb280a7d05d11632dd338ee3b8dffb95a27e76b95dc292f08c51435c704dd3c5fe4c0bce3a49ec47f66aeae7b6184f071ba4f67381a8dd66628d431b9535e1abad6727c677c165373a7f93dc61c5dc40cddbc27519a3a5f17e54fca1795e1e4d0d81de7053beef3bd7290d56190ee56b384bc0ffb07a08ef4014e5c8f056a8321320783c654958c4049f8489527def598ecf2719f9a1ee4b81b26091ff7e72ff7abf141c7ee2e18257c44f7c8d7789f9a1fe4b80f66a9fcac5bd7cb1166e6a631ff53304c77a7dbb3b122e918a4f95d71de2124b71ce539ba319fd6df8369c287c0da3ad1b970fc2c920d70de24ec1741ba5056cf89e8c795313437e6b34de3d3885e90c61d077af2ddc17a92b33bc91f786b6d24f4ec5618a71be508c0f54273f9dda17e78e7621cd0f2c6789ef2fab8534da11b72bd95b113f78be72ae2a98a754ce457cbe0ec40e1ac729bebf3adfcf51828f2ded820fea924cd2f99c5a949a20dbc576bece531ae93ee6ba9bfe32bf7a69be58b3be9c4b7ef6747794e1a6109aae8f7efc34891f7a3f9c75895c631c6d7c4f716c68d626988ef8ce678a88ee3ce739e5c5947a87c94d7f4ae3166ea7a5a6d19339d8ec12d585e343f64af3bce3174dfd8e9e2b8728f194f24cf2bc450137e867d6a5518aaabc7f64fc55e9579c4d5b153b7e569bd098b45de7f63cd3dea53bb47cd95f459473555528cc63176f21a7e5c515fa5c23fbcdc157053131bb8061cff788e5edfbeefaef01dbaa03b891479fe15f12ae3c76b7bd9319b23181b82e8a9722bccc20d38bf5b7de74c36a7ffa918c1712d1ee6cfabcd57c823748c373e95cb8bb8ad5638a8492fcdaf90c66de05806c2ff225546bfe7050c1b5d5f120bd3dce548b66b8783c2183992ab0ee799499f8df6ca7e9cd523237b4ad1767a224fdc8481ba26af52abb11d32b4e6241aa300e9a8d7e4556ad3c72c078accaf912cf2b2dc5d9f57a9cd5a16444e93664c31c7d6157995daf0ad029e6bf79957a9214ff9ccabf49957e933af527e7ce655faccabf49957e933afd2e5777ee655faccab7432479f79950ac7675ea52be8f333afd2c9f77fe655faccab74d5f19957a9d5f19957e9f8f8ccabd4e4f8ccabf49957e933afd2675ea5cfbc4a9f79953ef32a359cabcfbc4a9f7995f27b3ff32a558f65031c30e1f775fcfab426558fe4364ad7c028d802b7c61fd586bf135f73ce4bea6c7837d56f6e497b277cfebbf7e6f6d7aa58c2489edad4537c726e0b61744f8463416d105392e342881d500d907c0c9c2c47503c2ef984b35c282cc10ee358a48cff4d12a31e3f49f99a9e909c3ad97e4172b254d4ed7a4cfd06f81d53879f917c433056dda7fafd54b01963c41f7e3a4f5bad2b3aaa3c89557901f5a41780a4bf06dcec30e5665be0cea03e5ad0bfd540edd25c36dce356c1be28239ecae83b59f21d49cd7cb691458b391deae4ce537960a23ad8b7c76912daaf769641b030be8affc7b84448f016d83f126a128be6198fbfd2e5d929c74220f5937ad9862fe622c27c19c904e83b6a78474bdf23fdc6863143b7ebe1bc0d3cf84b6d6cd36732de89312592019bc66f4d9757ee4923de363046e5f1eb78f8e8cb83e869ba5c775e0636781d303d7919faf2a047fff6835f097c7a19ee62e9f03dfa29329b97e5da7f1946d3b795b15a3d8b86b6844f12d7638114cd16ec62be10d9a7976104172273cdb38397b7a786f808fe712a45ace28a09704546955f23348653a99f4c65cac30fbe658c266c237f6b15df1460a4c988dee935690233ff95347cd4249605887ea53e9bc6236539ad9ad76dccfcfa387f91d0efaad23c1e3fb35b8a3572c1c1b7b4d182d147af5fa7497f63a0ef707bd010c4c3d485db29b7d82addd7adc2f563851377c688fcadbad033707c12dc02a71f2952cf56b95594e7dd62f37528bf46593e0b574c6af912e5fb6d637a881d523c7caec9cf3579cd9a5ce5f493c97d24a726c9b385f44820e3bc6611e86676ba0fc0b13b436eaa5bf1c57551b49d136ceab0b8172259aa8ff804d66955b78ff32c95d65243fb9126cf713d6e451643d43f4378b2721e447c498a4ceb76cbf60e08f0439317a1598e7509c7421fe32d0d0e1e9af2a1d4bea949ec2ec55952b9252ad408a776bf47eb4dea27ea920f80ab6e7f3abc6f8c163bfde06fa75c69fe634d7adaaa42ff434ffa1f80eb7da832cfd0bf5d4d3258dd25fbfe94636de00e3d75c9667335958b39aad8cc0ea9cae3eda489fda5a51daf8d1ea3736262b86272859cf5d390584795c778bf58a5cf49727b04cec55a336f6deb31b7e269a3c516a439181be4cdaac8cd57ba3fddd7f48467d1b8a13d142404db86f1bc2e44fb6aa849111c0ba2aba2b91ad4e3b2b02fa088a57076a9fda34e8e6c8cad3d937790d41426b6c915e0f630a563c20f868c210c71cc00c5bca6e3d12ce693d84b30ad1b29c6f5386fe46881682a5497df9f8a3e91693a7e3f1e91fcde700f2af950883daae08bff558873fee5d463cfda632c79a8ba2a921f9aeee9a738674975d19ac5fa9c00b1cd2d95d5488e2e446bb40dd651d9967ee3ac0e3fb54d531b23b62bed4ede81712f04fb7ec49b3319afb12da8e8c75797fc4f90c7a3c0e9809fd37cc8a5f35447fb09b2dcc7756b22a785f6324c9bdc5c15712fa99d8eece129dd631f18d5d9e93cf64335936773bf440bdbd676ea349b47b4a6d01ce63139197e0d92fb9be3468b6ba9605f4931207fe4b8dc7ea4b830a6fb6e16538df6666a2369fc4e128b90fbf2803ba7b985236836c6195e450bedb16da77be4af0618b64a0c5a0b5ac8b140cbc74b79ba32ac0ec9a98564c1613875f86755526d43dab7c8d985f7bda12e8b36183c5a248f512a439efa9b0d0e86aa30b37597ca95298f6fec8fe40f20b3cfa798fa998de48c74cf22f69794eed3581ad47688f8f78721edede6396578e2ebe0fa89b96c8851bec6af56964fde5469b605eea2b15faf465ec99e876d5ed8a6467cd3d4c60875176e55a457341f171c3f97f2b792bc30b0bb1a92e3077c64c868ffa239d03339a8c4c39bfba38a3ac0499c1bfa1b7ac0ed239d2628c927e53db3b97fff79d243eb5875872c18a17d0e3205df0b92f5c282dd172a52ef507c6f89f737a76f17742710e7b61dd86b90901843555603a53b0fa60eafa9f2644bf7c258950cb47770450c208e4d6cfe3e6217774512fb230c0fe31fdfad9734164e801190c4358953def75e96698ce1cad2bbf08064cea6f2c6917ccfcd1a7ee355b60bca57ae5f3f69bcd1c91e4ef96be5fe9de1085aeedf67f1a2293f9d96f08f2b4be7ecad81e91ead2d9abbaef99c93da169e11e8dccad23cbc7fdb8837a85db4ff8c333c6fd3b96d8d03be528fadc70cf21ce0f62c90c41f00ad777181641b9c57b6bdcea76ec1488cd4d52c54241889689c85bd6de07a15fb10740dbc771bf20cea0ed1ffa85cdc1b0bf6d6a8e5fbd9b722de15eb1c5ce3ba01c30504eeb09667b4d54914990f44a497734d6b869ccab51366385f8a2ad4bd1996e7d43c1693d2277dbe8bf4442cbb47ca32af55d0dc5695c947e9da42cfc0f12bd42e8bfd6fba87bee5b5b01e665b80cfe17cc21f8033624d0e1ac79393386ed6a6fa7c8ab3605499e861388fbb3bcce4d0146786e3904713a891fd8d05de042a5cdf032efcda582f2ac4179cb745198131e86d7e8e881d0ac9d74016718c26f6cf7968fd4d58a4d7ea497f8d63a107fd8326e991224f3e348c179a31863c81536eb8d3b06daac7a9528f213165bd481dcc8ab6c24698fed6eb5f8802e036d38d4fd6e5c098e23a04a9cf97be338b112dca3805bccc6a2dbe894de920f361ac529b484a7747f97c1f8bf62e1c97ae493d5a37c76e8c63a471e6a4468bd45ba7b1f634cf3fd209d1de7330a409b19d167d97640ff9a1483d242b34d44f26703c1277aa80714bf1f819c6e3e7990d24319ce358cabf9d06b19ea627ec06cdb5dece77d358b70392c82812e231cfd7d2e29b816431a4570d321af1709eb0fcd9977c5f9e26cf63ed6053bfd76c0b249625f1dcd8a68c7408c7407aa3f7ba55059153a5dd56e7a037958689c2d98121881fc6484cd465dfd68535f179b998f6b7c07b8d8134ff287c4babf5dcbcaed86ca74acdfc57556388f64d226bc3388f43443a34f651580a67dbba3bfc40fc5793678c26cd0ecd6b1721d986eee5853a41f8b9deda52d27a1db2c868423f39c651b4c649746748d7b6556e85f7679dc372726c0cd87cbfc73ebf5980f359788bf4fc0796591af2dcabe2be85e187c289079d61716e895b72bb4c98f2b3c8debbb035a207219919dd13909a54b46d1b8ca9c06635c3907e43c6a828fbdab6e1ae6ef62bebddc556c77e1a6c133e6898367acc54a63423bf7e28d2ec43956787a944be69fad66c1d917e5c81d1bd1a9b7b1d2617ed038a48f7fc1639fc2ad6f2ea28ff0c92d9908ec9ea5cea3ba0396bbcb5a54a10ebf4edf0cbbe35971e2d95e846d8b62fbafdd09058b8e27ab68ef365cc33de351ed807e00e77986e06bd03da9714c98053377ca46b58a2ebef2d6bd70a1fcf5873576494e5da7a71781e383cc4f635227bccc5f5abf5322cad77a9a4a3a0fbdaf4ff19e78c7d247cb0e78d85198b68182c8b18a47e26af507b7380f4a03c661fef05edea72757916e73d21361e1e8c781ff599c4344ed669ad408cb14a752771162b32c6623357c51ee0752066faaf2213bc94ee42ac87a9ae6893bd8ff7b0cda5140fd8b31577dfb2ce927d4a0bcf68ac866fa93c8874f3b9d4eba534b728ae1d3c1e6d72f0535bca68b2355c88f33a603f6a774c6273649b41fb8d22ed88ff7d34d902618ff4cd0f745def8a3b5de8272dc7f438972459ff4b3e957989ad6b640440d8590aad198863a25cb19beda5ad722b4d6cbcfe31861abf1fcb36e55a76c7b8754ca356ea2f6f8571cee3542ff513db58308e7f3463f511bfd53d8a13247143edfb49c78cc40620196296a834c79f92d74e7315098648fecdc6d85d9118d3eea425869cb7694c33c432dfe011af47223fa92c591b3bcbe056962eec899d3ce10f86cce377e1fa917538e2f2fbd68abcb0c7a30ceb48e5f442bc9530819a30e434a99f14f2dd101ca68ce3c91ae38f08edb038664b437236b78a1be12428cfba3aaf8b30dc692b23015d71d736b6e614bb3d9c2fe9b30af6444f77fbac3e28627d736c48fb589809243a30a903aa4abd8f0cdb73fc7e6abf2efa70af88273b595b4b0ec66ac9e60ff3b5dec53170f365d6eff6f95e16188744e22e686d5e461360a20ed89d224f1833a3c59d3517f9c9a23bd91af2f7347e3bc33bb5cdc775439c04d65d6fa71f6c2bc1fda03809241b1ee5505a598a2b921acbc4770e913ed2b6c6e02df91c708c60dbfccf15582245628b76f798fc2ed7f73b43ef6df3bb5d2b635f15ff325d127a683ea60c19d3c6fbcf95f9e8db60ec2fd1e9c0581e610c8b75af281e07c614635cb431b696970c2a7b1572e3f98aac9ec440fc39ba7b11c3d79c1f5c9fa7ad1de6bf701fae058cf5757718ae6ec91347ea6ff5de38e58af8fdebf1c78523ba43bcea4e9117589efee9f0e6cb70b7791f30c1afc4f2336c708e13fed7cbdb53f03eb0f5290c77d33768bc24ebe065608325c38ec4213f94a575f03e8c62436237294ef97d600375251a573d7bb9ee4c5ac7d9df199f7c797dbf523aacc4292bb25dc629b7ef4b09d75caee75a8875bc758d57c431016918639b8034db0299670d611595f2134a996d0beace53cb3c47b7d409c9ed95ed733bde12a377ca4bdac51ce4472186200048bfe2c42b6acb3077c843ffdf129350ec931595699e0d80378f40771ca5e3f4d321718f2d69f6d4decb166304aae287b2bd3d8d1f6a4d2ba578a3e5d5310bedf35354c5380cf8c018e0f8768289233ee18c076a0447896d6bedf395f0d0c458cf596008fb5e398ff7ce02dd85afca93ae96e5ee1ec6630146ba4073b5503bdc54a23e932bfa9ce2caff77c4651569feda5c26d7cac7799cef2dfe92b335cc47999f81c4ac707d820591c7982edbac5bc5c558f158fdffb8fbb6a646722cffafd2e1f83f02c266e87f5745ecc3305518882eaa8b2a30f6c6c4865229670a2ba56c49696c26eabb6fe892f7bb4d4fecee0338a5f33b4aa5ae47474747fbe1ebeb23e4d277b993bccd1f53c5976e7a3f9c8446bff021cafd40e4f573c4dd242addcf7f4a7531a5f863ee0e3fc4ef794bd97cfe3ce0fef46f6959e5fe6b0ff30fd37e27f8b03bbd0ff185e1ee33cee44a63336f75a7997dcce8748ff2916df375c45dddf5b10096cf07a4e342ed7c40a18e0ff6ffb57cbe7af5e6e63cd2b97740d9b9b670bcefb542fb38d4af5c7dac28b6b9b26df3f27beb1dd987fbe96bbb5b9b5c2d968b5dbc2a9e1560a9ef2f9a1ce13fedab77f1607cc2e6b6f5c6f6b77a77f0817ecbdec30770667bfc6efd233f1f64ce9e25b9bfcf0f51d3ddd487df9fd5eacff4cef8ca2679f9977cc91d7edf60ea83aea027bfdc7a64eacee014cfe714daf660dbc9a66f1c75e7f43bddb36df6fcb36f7ab23674e9b79bbb0e56cf7adcbba7ab7f5c6dfc67d3f682e5e17ee475fbd5f306830b637bb55f993daf63ee843e7cde4effdec73ff2b17e3d0ff6d764fe7eb7e3e8217c47dce17ce4ddaa07dd9365ff8ebb9bf97d75aec7b59fa3ef5cd6fd2746ec80f1f5f3e700cd68b29aed68d57f6a615fd0ad1f32bf47261fd617806eafabd09b1fa447d4eb74b3279e9efbb7eb85c675856cbc1b79fc3b3bef5236f3d83feeee3c722bddfcdde8cf7afcbe6fc1e66efe21f16e36c12d7376d0e42f59cb1cdc2f0ff3df7695d96b7d9bed427471ff7588ffb4ae3e70775ef1a5769deef9187bac373b37b9f132bb536d948d84b5e33cdea7446eab56b217fda6d2fd2fb4bf7fb1793edf8db08b38d0a74b7a1e66ba5dcd1f878f8bf53dde742feddefa552cd8fdceecda47e7cfddb990daed8ed3b115ee1c4def07347608ae5e9e0a3e251f222a57cfd9dd72b1f15bf16cce618fbc13d09c8d37e7f5e0e2f2c5bb79daac16dfcc3d9bcbd92e848b736bdf34620d76d8f89f95efd17d25b571fb115ddb3a70bade5ccfa4d7562b8aa2a7c49e95b0f71e8e29b7c7e23eeb7556df64b9b817e9bdc8f62cb929c3e1e3d561e77047ea16f5f8747dee0f5cfbb49c1fd0fc8dfbe5cb8ba73d32765d760c41d134d5b1a6ef1d68f79d9e812eee69e736d569d9de5edfd1e5e29bb277e9ff5bc6af92cd751a6ff3337d1be613e7301f5acbd93d4517f7660c3ad2eee1aa94d6bee45fdcd6e3e2fedc5f5ccbcc0e7e7fa50c76d49856b6835f46d72f705638df74bdfa743b0fc3eef363ef566faefcbe286ff161b37afea2be7c1fae3b38e46e8a8365e1c3eecc7d593eeb3642cfc7dc69ff5ef71e1c626b71ec3eebc1bede6c79fddfb2adf82bf655eb72d0f7921f10773ff0f2e261ba5cbc56fc286676b4532f7aa028da5d8e5d0fa67d77847fa0c364fdb9f13511bbf367c7c8899ffce7bbbd59bf7d2ea469cf0297e68d829c98ca7863daeedd8a94cbd5f8c4c8c7bddcdecce82373db433433e77b8dcce38d3bdfa3ebf293b9a3ddf9c671774a93f46e502d4b993d77fd8ea7fbf3e5b3b10d1f7c26ffbdeedb6d94cfdc99f86fb30f496a6392af4577237595fa9d96ef767e4dbc8ba7732db3d93307badd5fcd96a3e6c963ee9bb992cbe7fbf3c79bbbed327a7a84a3e4e7f632fc31bf7ef3339f29e68ea7bd3733eb4b2b1f14caf1b8fbf71f427ffea8fc391d776ea1dcdf0fdb0b98ebf5f9c3238aae1334b3dff2a4f331d626b871df53a7adfb0455a9ef8d6299ddde3cec978bcb3737f78eb67bb6f95fedbdd979a0f95dfb9b3a9b8fd08bacef99ffbd7533d5f269b89a8d58b767bcb571f9d65f4c438f4cf7abc5f566b9b893abef576af57cffa665c682bf3aa3d35fcd9fb42c2c0fda3349c783b9abff9bbbd063f76e1e18bf9779a43e557fef9b6e8fef50864f5e4477fee25166777d977cba7c3661c4bec9dbf934b43e0c47de3f6df36ce735767fbe5c5ca67595b6a174afd9dc5d9eae5550f414a2991ecf87f8c96ffad6e25cedbfb5d49dd9e782cfdfb2734f68ff77f2183dbdc1e7983e5e3c84f62cd621fbde997fc9d427534d6eea9adf0fd9a3299cbd30f93fe43ee323dbe6283d44e9efc8bd7d97efe3c7f8ae33b28f8536454d7e0f6917f6beec9b55e8cde9a674a7fcd07793cb473d0eff5bcbb8a0cb1c278b9cebb614fa3723fc5115d681ff53ef66d16b4d38bf7e3bea9cfaf5155fa6774054fde1cdefa788dd997101cdc310cdac9eb84b0e3e604d35c6ffe4b875d8a8fb3552dbc3fb6fabe7bb1fabe7bbd9eaf9b6670c69906fd9935a464feebc67f3d89addab5438f3ba7c7e385f2eeef910fb55347fdadfde389f4f7dbebcfe325fd2c3f6d27f376b385d96771d7def3c2b9b6f56dff9b832becaafbbee5a502d75d69a97617db3cfc6a0fbbb7fff7ef5ab39d75b1bd77ada6e2a6737ac51eb7d3693c9b33b5dccfd63d9da31d39198b97055b89feb69fe942c1797f56f1fb0565c3eaf74fac697c0a3b90758cbb66df36c51dea789ffe94b8b0e6e98ae2ed3ffdb6f6f5d8bf6ca0edd7388ba9d5fcfb48c6ee4c3a73b8ae6bb7839bb6e68bbe7b53cd5dfd531feb4e6c3ed8d15db4f4b3a7eeec32ef05f9c0f8b9bd4275d6e7ffcbb3b3bfa955ccdbe64edd9f5cbc5b75ff59ad15fe47244e607e647e1bc54b57d5afdfdab3f7fda983db1623b703ecd6eff719bdfe3787325fde7bbd0fbc4835be2fa68453f767bad7c8bb77bddabc5c3c2e8b6161f12f4c683c5f4fc3f262793180accd4e4e3bf267f6c82c9c7c9e464720f23ac9f7efefc793209b1c09afa8988c9c7c9ffbbf9fae533083890028180a830f1ce108f404418e1f6ff298fb1808a0bb0493c8c143d35d19393c96d1473a1fe802a9c7c9cd498ab68978b08123639997ce2c866ee071401563a2bf3af7ffcfdc70df008abf13e70ae8ecded17a85038f9f89f93b3c93f4f26df15a478f2518904bbc0038692b3c9c709e3ea17c2a4829462ff172f51bfc02d24147a14ff42d82f5e42a8ff0b8228c49393c99c5f138aa54e577fd959a05f156f02ecebc77fa6856400c51c43b1f1a0c21268ac989c7410f57fc20210e1a882ab973340913f39996c7e93673a40c9a948982211d6898000332c084294f05811ce640edd501e4c4e265cea3c7fc2b1c9b097ac4dd1797b853516f12816584ab0a650e16244f046e262f88d12cf849982846101420ce352042552b908bc334f621f2b9e3d00685f690388c4a1292617f68b445fc23c805139e8cf2e2fa71f6a1180308505831460ff150a5f56619492581194c784112c84327601999f28421b4832f114c53921f22ff380e62b84d0df0a81e207c8104e4ba1d9e5afa5f0e5745608575ea968a19c7697e71fca21106fc86e7232f1a1821e9418c83f29f005d99ab2c60c719fb0a0f008a064d3625873fdfab7520c6150ec8b31486e8bc1807bc5608877c5e08bee8485706c5a7d16dc45baa4b1105ce82f5b53a8b3b78e54b96bfc9160b1218a5f110ee244604adbe989a058a2321d4a2837784b500802be8594f87a4c29637cb8c528d0805319e357a0ff551081202f906e21787955a76668285213a908d3ec61124146de70998e23823614138d1058aa75427b01c076e322680b591cee4cb99ec6660c2cd18390fb52823d8c2aa907fc94f240e814458dc263cc604c405611cd64fdd2989b0ed18911788d056608b7a2648c513b51895a0b28925f6150234a05d10698ff559a97acd7907260a6ca0a2de020165c698c7de802482ed406ef6be543a16ed89dc954206a1fe3be640c0640b61f84f31301f51c3008ac6710a9601457d13ca018784ae05a41194ac0d7c9db5b1309c644828071a908025f63ccfefec7ed76d68bd4130ca1f5d65403e29dc24cba39ae08153878e10c4b102a15a7b3783700f8446e1aa024f2a1d0820716d5befd827de29d2bddd0628195da03a5e5875e909d0a8b18dd6d8972324df535940401514a27fe2a48ad9745905091000ce55ea70374c3eec3bc50bcebc534bf6c844853ef5a5544368b46309603a10a6e3067a0111ae218be5332604da8c2d561af596a1b24d9e1c8c3fe813260334e2a9fd7f2a794996d44c2f02bf15538549aec078110d3b85e222d6081254f04aa0e6845293ee060fbff8dcc8a04f6315304d2417079a185b16150ac06c148c06acd39471a0c4c9a4b33477809da6005624e09da8f8002c4994fea037595490f51dd08ccb6dd0002a341f98ba01f919eecb08eb23500256075b6af425e09f511148d2d305be599d2d703bf893f8b083b237c3c07d84e7b9910259829f723b1025b2cf40c53ebba63588144218e1a4b62680a7a8af6877c8d5d3c9c4a52efd50a85985223cb863cc23ea935f814a187632512a492da08ce7d2c98ee3988339408a387684108bca618a95995ce1464704df78c69d14c55fa3143afc027022355ade3182b2c3c9e888033d3172a6ddd74800659556294087caa0bc774fa6eaafe716bbd222a24822720e0b1d44480e2a41b50efab5544c8a5ea46649315e251541d1caae0daac5105d4ba6b15100b8eb0ac165ebc9e5e00c43d019b08b15b9c05fc2ce22ce0be77c64500ccf3a95d6402cfaef6fa20e61fe2be5d030c01e70a8e4170f13a14a97bdb106c2c484414d9f6817706be735f68fb1407d0d63f073eb79f0c6228a49d8638900832960614df605b865a74372fd8815487a2fbc3ac85e851b8c133af858a428842383bef21c79ceea717e7972db0ba2ea409d59388942150584484415a8530ac80d32101a4765a666f82e878f32f48eca0d204a81554460061ecd6895532f1196c8a8f138f122493f5da28584a74aec585dacb6c6c566255b2dccb7464a94667859c3009d738c4d0778da3024c583d33a6e40a9a9e76626bd69a518018b96d4dea792933248ce8aedd08ca3f4dad7feb7cbf966a6b356b287614071ef18948ea6dd06094804caeb9881aa92e8726894e006b4b2193b74b14126120ac26d52e61cf0af46c0d9eabc2744cba441c8a7f25a227fdac8c7d2c91d3a30c44f3d8f5a62170e5549e43d0d937f878bd75353e822bc252c2003b097f0ca77253d61896de1ac97932116400784d30f5251743135f138a7da7c91c08cf26b301700a83a1390f3023436b9a44f1d0ead5a2e7f0e288050c2238103cbca54835b8029d88de8dceb47fed10272cdb081718c51110a98c4abe8b25dd27d21164ed566743f1bd9568f5881bc65f19806c1f7bc3e1a9a6720c4fa6b0744cf12638230c10b63edb9e9763c8995d2da5317b18d133a38a0ca10cdd0f803ec5e2228d0548a03cb0362beb50190d7a56fbde5e61488362949dbff32e1529d79eb3280adff60207781717631956e97a398be3d20c26c5a898d3520eaa2cae5550a24ad192b080e235254158ca8bdc4b04294da5865c3d86a5b2db0c66154638c856456e3311c604403f2252377fd7fc4c15da85e900948715ac42e358d6f96d643b5c5366154ae21355791fa471584b2151a19660504bd6abe4a64c242ae482bcb5a750a43627c0752de879a6813da7cdfa98670d25e14185c25aba696c438a8e346b2a2e848596f6905146367223ce854f58736154888dec02d7d87c2211df62b16fa9c422bd214dbcc54cb56437df4268a6af297fd54b0fc169cbcb1956af5c6c9a2aaf446a489c6971b225554b6a60722ac3469af020aae5c24536bdc5911a529228c47ed2d8244ba4a6544b80a6b4b1528405b28d5d7101837a2bc8e3bbb9ea6fcc2bf914c64462b1c50515610970285f35b7e3584764b9a623cc9e8ee5cfb594c7256355958795cee864eb2517411412a6070357dc00ff99404ad4be0f96caed5da0082bd80349773e7a60cee0c0ca8e1d4069de592dc176184858a6bbf50fe129051ada44473283be0971960bcdfd20f06782c53e8602465d956317521d000a3d4cbb004ed8ed47d88ed2d50c3220160452f266b423c3c1a97dcc088e54401ec72530e2011b9f3fa9048691d5258d607335dacd273135baffae02482d25dae856454fb951e775820a16129db8dec1c1a0d602469d6599aaf5a5ea45f5b401a7f317014eed7d3a91acafba0a5b049d90fe5e626012abded232a2390e081af40583c6960ad28e0a7df857487a3fdb994eb561fa07b4d78e6f542111fe7fc550a83d5873b1c17e6aa3d3d108da9972edc17813d12a749348c5236bb6d607019bdfa48fe321a9a5503dceaf4910c118325f62247047b6ebdc9b74aa1ac5b41d83ce94c6c57e3d8a0d3815c341bc95aed1cf5cb4636c618a8559e677d4535d84b172d869c0f3c556271118532a3fdd06ad03f77a44424da44de261c1b0c2b29b5a93571b414e6cec55541cc05c913dbb52a8aa35fab1a313af2cfdbb1806e8463ad95b552663b8467c60ab826504d3a8d735aa6386b254b534a3f886d5605da733003c3c5b6d1aa00e966ec55017639bbe6838cf989755b44b1dd82ea5d340b6e1196b535175b1742c833bd8ba155a1d8c2d7aaea11cc373d8a215ebe718fe8a361d5a074b4db5d68f1df105cd8ab80e8616fddc508e1159ebd2e675b1b52bf9bab81a747f83e007bda3f56b32c5868d2acf5da3193ab3d7c7d999c7dab2a340a649405851a9a6930678871b852e81a56a8bafae5dcad408c671453676d4f6158ac251ec4e97d5b938a73235b66da1da70f5185c334497ee4018d0796a2e8726747323b5c8082b4150a3046b01c5d33075885e01c476dbb046b4ca0ddc45e48c09ae5a5babd555e413412b2637136da69ba33fb0b9a60c6083f7e55dc30a5dcf0f7f26382994823ba45808816d412ad2dd393bf4633585ce36b20d90da369a1d780732f6e366133f28b65d1b9d1f66b25989ec17ea1fe091207f342a0ef3ecac5e22ab19d13f204aa822baf1a7117f265c61df2cbedc3111ab6e490dd00a8f5ac2d910fc02453152ff4bb7884b91ae88b3b8820d958e8b60465678a7d2a2d0e144507b2054ff4b07072e4162cd105dddea1f634ae2c2b98221dbc6b60f40ee99823b1dced444e9ba1219c3db34e4632f090ae16ce319eaf52c6aa2b86aa8c54b73f64a92409e654d205d15a70d04325f0273a8b707caa4824c7527887731646edc6d47ad2152dcac923b30dd2f0a8c5eaa83bedd74d2c91af5d12bfa8d0e6c0403dc8d28194075422977d68bed9054f1d183189c7f8125e9ae7c816564ce2f774252bd483b48d9c3ee9d903cd3dd2da00874bab2b178e0e3354ca81ac2edd4ea4544be15746ab4cda73e59afc1f6026c214daa05e1b4a4cee0452a81b8319b914a6859503fed19723f7957774628939389b5d3cca58352d89a47eb583bb2e436a5a96966a2d6d35fcbe1df4c50c2b5c66d31f3cd09bb4e53e801a882317317dafc787bd5f7ee0c971ebdee0227628bd383ec1db870e3afbb1175bbed0e70cf17ebc9c46752ff39bbcc0e60d550bb17170bbedbf70073fbed369433e36e22e786d74dd4160be35668d1d0b81554b137eec519b3e37f9e4c7e60a93287142ca1d446652e286cd417eeeb4c7efcd764a8eb8e2f90b0d457c63bf80d99f32fdc3f2a11604e54f826ad27b7d0f938999e4d2f263f7ffefc6f000000ffff010000fffff69c66f9a0840200`)))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is this used?

@nitisht
Copy link
Contributor Author

nitisht commented Aug 1, 2020

@kerneltime here is the explanation on pkger file usage. I use this library https://github.com/markbates/pkger

  • /static/crd.yaml & /static/cluster-role.yaml are added in this PR so they can be bundled within the kubectl-minio binary. This means these files are available for reading at runtime without depending on user to put a file in a specific location.

  • Right now there is a duplication of crd.yaml and cluster-role.yaml. I can't use the files in parent directory because Pkger requires the files to be within the directory. Once this PR is in, and plugin is usable, we plan to remove the kustomize files and point the crdgen in makefile to this location.

  • The pkger.go file is created by pkger command and it is a representation of the yaml files. We can add the pkger command in makefile as well.

@kannappanr
Copy link

@kerneltime PTAL

@kerneltime
Copy link
Contributor

Nitish, I pushed a commit and rebased the branch.
Now the makefile target will pick up the latest autogenerated yaml and it is committed into code as well.
Also, I see that some of the yaml that we need to create the operator is generated by the plugin code. It would be best to pick up all the yaml from the same place and the plugin does not duplicate it.

@nitisht
Copy link
Contributor Author

nitisht commented Aug 3, 2020

Also, I see that some of the yaml that we need to create the operator is generated by the plugin code. It would be best to pick up all the yaml from the same place and the plugin does not duplicate it.

@kerneltime I included the larger yamls (crd and cluster-role) that are sort of the moving parts and can change in future. Other yamls are smaller, and mostly static. Adding all the unnecessary yamls in the plugin will make plugin binary bigger and doesn't add any value. Plugin is generating all other yamls on the fly, there is no replication.

Copy link
Member

@harshavardhana harshavardhana left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This error message needs improvements

~  ./kubectl-minio tenant create --name boring --secret tls --servers 10 --volumes 10 --capacity 1Ti
Error: the server could not find the requested resource (post tenants.minio.min.io)
~ ./kubectl-minio tenant create --name boring --secret tls --servers 10 --volumes 10 --capacity 1TiB
Error: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'

Should fail with volumes is negative

~ ./kubectl-minio tenant create --name boring --secret tls --servers 10 --volumes -1 --capacity 1TiB
Error: --volumes should be a multiple of --servers

More undescriptive errors.

~  ./kubectl-minio tenant create --name boring --secret tls --servers -10 --volumes -10 --capacity 1Ti
Error: zone #0 cannot have 0 servers

Either this should be fixed in this PR or we should open issues for this, make a note and address them quickly before our GA.

~  ./kubectl-minio tenant upgrade --name test
Error: the server could not find the requested resource (get tenants.minio.min.io test)
~ ./kubectl-minio tenant volume add --name test --servers 10 --volumes 10 --capacity 1Ti
Error: the server could not find the requested resource (get tenants.minio.min.io test)

Volume add says its scale command

~ ./kubectl-minio tenant volume add --help

'scale' command adds zones to a MinIO Cluster tenant <---

Let's consistently use flag descriptions without capitalized characters

Flags:
      --capacity string        Total raw capacity of MinIO Tenant in this zone, e.g. 16Ti
  -h, --help                   help for add
      --name string            Name of the MinIO Tenant to be created, e.g. Tenant1
  -n, --namespace string       If present, the namespace scope for this request (default "default")
  -o, --output                 Dry run this command and generate requisite yaml
      --servers int32          Total number of pods in the MinIO Tenant, e.g. 4
  -s, --storage-class string   Storage Class to be used while PVC creation
      --volumes int32          Total number of volumes in the MinIO Tenant, e.g. 16. This should be a multiple of total servers provided under --servers flag.

Usage output lists --capacity twice

minio tenant volume add --name TENANT_NAME --server SERVERS --volumes VOLUMES --capacity --capacity VOLUME_CAPACITY [flags]

~ ./kubectl-minio tenant volume 

'tenant' command allows interaction with MinIO tenant's zones. --> should be `volume` command

Usage:
  minio tenant volume [command]

Available Commands:
  add         Add Storage Capacity to existing MinIO Tenant
  list        List MinIO Tenant zones --> list MinIO Tenant volumes? 

Flags:
  -h, --help   help for volume

Use "minio tenant volume [command] --help" for more information about a command.

Default help formatting is off

~ MinIO Operator plugin to manage MinIO operator CRDs

Usage:
  minio [command]

Examples:
  # Install MinIO Operator from the official GitHub repo.
        kubectl minio init [flags]

Available Commands:
  help        Help about any command
  operator    Create MinIO Operator
  tenant      Manage MinIO Cluster Tenant

Flags:
  -h, --help   help for minio

Use "minio [command] --help" for more information about a command.

Makefile Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-operator-create.go Outdated Show resolved Hide resolved
kubectl-minio/cmd/cmd-operator-create.go Outdated Show resolved Hide resolved
@nitisht
Copy link
Contributor Author

nitisht commented Aug 10, 2020

Addressed comments on error and help messages. PTAL @harshavardhana

@harshavardhana
Copy link
Member

Sorry couldn't find time to look at this, will do it tomorrow.

harshavardhana
harshavardhana previously approved these changes Aug 20, 2020
nitisht and others added 2 commits August 20, 2020 10:30
Co-authored-by: Ritesh H Shukla <kerneltime@gmail.com>
func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command {
c := &deleteCmd{out: out, errOut: errOut}

cmd := &cobra.Command{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not in this PR but force delete of PVC can be added.

@harshavardhana harshavardhana merged commit ea73bb4 into minio:master Aug 20, 2020
@nitisht nitisht deleted the plugin branch August 20, 2020 06:24
return nil
}

func tenantMCSConfig(tenant, secret string) *miniov1.ConsoleConfiguration {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be renamed to tenantConsoleConfig on a different PR?

DefaultKESImage = "minio/kes:v0.10.1"

// DefaultMCSImage is the default MCS image used while creating tenant
DefaultMCSImage = "minio/mcs:v0.3.4"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please rename variable to DefaultConsoleImage and use minio/console:v0.3.14

Comment on lines +100 to +101
// MCSReplicas is the number of replicas for MinIO MCS
var MCSReplicas int32 = 2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use console

Comment on lines +93 to +97
func tenantMCSLabels(name string) map[string]string {
m := make(map[string]string, 1)
m["app"] = name + "-mcs"
return m
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tenantMCSLabels to tenantConsoleLabels and -mcs to -console

Comment on lines +126 to +132
Replicas: helpers.MCSReplicas,
Image: helpers.DefaultMCSImage,
ConsoleSecret: &v1.LocalObjectReference{
Name: secret,
},
Metadata: &metav1.ObjectMeta{
Labels: tenantMCSLabels(tenant),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please use Console instead of MCS

@harshavardhana
Copy link
Member

@nitisht PTAL at the comments from @Alevsk

@nitisht
Copy link
Contributor Author

nitisht commented Aug 20, 2020

@nitisht PTAL at the comments from @Alevsk

Done in #261 cc @Alevsk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants