devicely 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/bin/devicely.js +1 -1
  2. package/lib/androidDeviceDetection.js +1 -1
  3. package/lib/appMappings.js +1 -1
  4. package/lib/deviceDetection.js +1 -1
  5. package/lib/devices.js +1 -1
  6. package/lib/doctor.js +1 -1
  7. package/lib/executor.js +1 -1
  8. package/lib/frontend/static/js/main.96600727.js +1 -1
  9. package/lib/logger.js +1 -1
  10. package/lib/server.js +1 -1
  11. package/package.json +1 -1
  12. package/scripts/shell/android_device_control.sh +49 -0
  13. package/scripts/shell/connect_android_usb_multi_final.sh +49 -0
  14. package/scripts/shell/connect_android_wireless.sh +49 -0
  15. package/scripts/shell/connect_android_wireless_multi_final.sh +49 -0
  16. package/scripts/shell/connect_ios_usb_multi_final.sh +49 -0
  17. package/scripts/shell/connect_ios_wireless_multi_final.sh +49 -0
  18. package/scripts/shell/create_production_scripts.sh +49 -0
  19. package/scripts/shell/install_uiautomator2.sh +49 -0
  20. package/scripts/shell/ios_device_control.sh +49 -0
  21. package/scripts/shell/organize_project.sh +49 -0
  22. package/scripts/shell/pre-publish-check.sh +49 -0
  23. package/scripts/shell/publish-to-npm.sh +49 -0
  24. package/scripts/shell/publish.sh +49 -0
  25. package/scripts/shell/setup.sh +49 -0
  26. package/scripts/shell/start.sh +49 -0
  27. package/scripts/shell/sync-to-npm-package-final.sh +49 -0
  28. package/scripts/shell/sync-to-npm-package.sh +49 -0
  29. package/scripts/shell/test-local-package.sh +49 -0
  30. package/scripts/shell/verify-shell-protection.sh +49 -0
  31. package/scripts/shell/android_device_control +0 -0
  32. package/scripts/shell/connect_android_usb +0 -0
  33. package/scripts/shell/connect_android_usb_multi_final +0 -0
  34. package/scripts/shell/connect_android_wireless +0 -0
  35. package/scripts/shell/connect_android_wireless_multi_final +0 -0
  36. package/scripts/shell/connect_ios_usb +0 -0
  37. package/scripts/shell/connect_ios_usb_multi_final +0 -0
  38. package/scripts/shell/connect_ios_wireless_multi_final +0 -0
  39. package/scripts/shell/create_production_scripts +0 -0
  40. package/scripts/shell/diagnose_wireless_ios +0 -0
  41. package/scripts/shell/find_element_coordinates +0 -0
  42. package/scripts/shell/find_wda +0 -0
  43. package/scripts/shell/install_uiautomator2 +0 -0
  44. package/scripts/shell/ios_device_control +0 -0
  45. package/scripts/shell/organize_project +0 -0
  46. package/scripts/shell/pre-publish-check +0 -0
  47. package/scripts/shell/publish +0 -0
  48. package/scripts/shell/publish-to-npm +0 -0
  49. package/scripts/shell/setup +0 -0
  50. package/scripts/shell/setup_android +0 -0
  51. package/scripts/shell/start +0 -0
  52. package/scripts/shell/sync-to-npm-package-final +0 -0
  53. package/scripts/shell/test_android_locators +0 -0
  54. package/scripts/shell/test_connect +0 -0
  55. package/scripts/shell/test_device_detection +0 -0
  56. package/scripts/shell/test_fixes +0 -0
  57. package/scripts/shell/test_getlocators_fix +0 -0
  58. package/scripts/shell/test_recording_feature +0 -0
  59. package/scripts/shell/verify-shell-protection +0 -0
  60. package/scripts/shell/verify_distribution +0 -0
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '9629b6aadad5925ebebf982f198144a9',
33
+ content: '7c9390674f723c59f58ca54e128b4a3e477b1101aff2efeb0d3f6d9645a5f661fab5538ff2f4e179c079c4f64c59026831791d2d1182071484cf9a9212e2f6abfa455dba63e87f960dbe0538b804b57a89b3ca1906af41e65a7b998bbb7be05b191a6aeeed05042482e5b0a56135c92dfcba0a963938b370c98ddc5f6a24498fa1d71b33dba4a34123901277b20fdb56fa71a34e3e32cbb790359a8d6229cbf51c20997e2d073b590da01ace8384d199769a0d5c02489851aebce9f369d9167cc3fa7882446c1f147890bd1f5dd06c04a3cb2110d0bc23f3354d43fa0006ce177c558ee0122e73f95b3bb60af67d41d12463ebd637e06c55214724c7d1d6d9db1f4cdc17f28f8415ebf35b093f2b6d1f94bdaab179348b759db535ea17655923d886a08773d68579ac483bec9670d86cc157c90d861fb3b09579349f5917cef9f8ab7d73c31a5d042440cc62a1b63564a84240abe7fb0d67bf9e90edaedb7743dfd75f2103bc7223326b0527a1e836ae16549f81c322afc765a5bf3778dd396dfcbb318c6e18e10a6b262cb071d1ef632bf42f65cc82a986f9df44005b022d7ed423794b7c1ea7d68fe373621e907219f94fb44c315beb0134c3aec5cb11b920acca37ca77e61e791e596138f083efc0cba717158f99308b3dac14850ffffe5a3ffd0621e6dd32fbf6d1566afdaf31f0d84efb84e2839acb0c48e19f4555b262f76f3082a4616109c4b5988ee34f9cc4ded6bf756e69c6426d657e847a4ddfbebd88682180b65f5e1f7b4de34db1c0d32143b27d350fb5b0b0a608bd1cefa321a3f2ea17d75cc1a77dd13586842206268c795a732b9ea45fe4fb5be9ddce26d55e46b3846705d23b50f0f8bc09a7b99d59a8762dcf6803c7565cfd240836f577db853c83941c070360c08bbcbf8a1c79e7b008007ccdc263381a70bac92e587525e1b792dd115d8f64626d2f88be1dded9d5ef3efb1c9b56df7d5e61892407aa0f3d7241f8796cb6d1038843ccdf6b2b66fdb3f564bf2c14b5430d1fd1377da5da0df2cbd4bbd408519f71b0e0ee90163e90e59c7f69f8c63c5f227d0971ee2f83abb7238ece9520d943169336fcb5a330b23ba4ef991552b677b0172041f63c8fe6ff4b5c3e9a4351b80b209dfdf3da2a5e4a66cd95cec9b60c88de21ef8755e79faddd371ca4091214d56c6cc1897012a131c6a3778ba5c3fcb64fa44fdad74c453a21da536b5826628abd5181b8302554718e8c1203d1dcb0ebe1d27ca43bbfcd298bed0808eb9a3a33a56700a38c1212db856dc5aa7088d3553f33805db8431e37fc53d1d92e3332455fb3be458f095a3180d717162d4f60a2a256e1b62832c3ebf319071acaece23f67219a4e15a2a8436aa3172c392af5de90448ad568f67c1f3ee64294751f8820687fbfb1f43e4722d0b463873088d4d7ad1f6e38001e1b94242c1f2590452a123431734e86ee8d22b7a3bd89f217bef4ea6dd361571bf80ce6251f783599d319086cd9505623d0a00aac5c6d7ef7cab1cc719454084f59962af079aefc77b87e83d7505388f24127f1dc1dd0f8d17fad1c41eca4c9'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '3d86f06c2ff85e00bbb1628f39f6d8c9',
33
+ content: '9f3a1b558ec8040766f7b5e1409d97e1ae888bb71742586767b89fb2e4daedf7633335f2a575a8be3f360fa83e074ce7450d1cb9d08ed3f66c08d26cd124b940ab9ca58e74e582d8e0178738eb568f0d75982234f2887fd4c3d0e181b0b2a2d7d13015d77f28485578072151be9173632925bf2cd4b451b7ce80b76a9696837c97c039289c3f72b7efd46ffb51fc29f66cb81c7bf1d252b2c1faff4591cb4488814a612c1ead87e64f7826b5417ad0fdedad77305b65f1e628339630bc70bbc0e61d6025a2c544085d97a75131523cdf43b57e5cb3018176a47dceab6b53026a47936319d6b54c945a5be4e3e265335270ad4559b224d0646af76d97a006a348ad68b00e2b2090b15737c71d89eddcce908e573c3d3445a69256d0eb0032eef49c8b8eee3b2cc77eaef9dfa53bdd554c44e4664f2dab7e05cbdce3593c1f27b4f9fed546a20634ef38b800bd47737098005c0cce310b3e8c3f8cc57978c6123d202acefb0ff076605f7eba62d436b5fcd72eb320d9abbc48cae9f62d0bef8f7f0cd8ca8d33051e3d46baa5f6afc8305fcf7c5d18782b4ba0b97806c625b29045cf2b53380a78641cf96175a9502c34f77d1b305c0ec32b4bc251d018a24cf01dfaefd2418959c2723ef76a7575fa1f525578b1dea023030a7d29491740f220d96ad37fc12affed5e05391c25ad942a9995963298935fb758eb31bf934ae9d23a415a19e16695726380ed366e0ee995653d9c955bb2ad3fe78944fcd76cee01dba0a92978aca9c7c27e214afe50b827215feaa6f1448d48ed55a01a6818a53841d7a62f339266ea98945b77d069035de2553fad7213c9a2537951b7ed24d5490a807ed73339c493085ea1ca216b797591244393464d19a0a4730af25e9486f2095944125bf232d54b1162c0a596b2328cc1a64a2ef4970422ef100df5d5cbb16aef2bfad068bf65105afbfae981fb05b58118c8e191c02a0753a1f7fc14a46b0ae5bd19950855fe9730a273d3ba4db9532caae23fae3b1a0fe6679508044108e88b4d6537a6bc919604f18165a6191ee5eb1132bed9728e595738fbdbbf6e3f78f84b9d856c90b33e5bc0dbbe573339afd4cadfc4af6d081792510bed843a2c836b834e92547bdb09d9d32025e77a60f801e0ba0dfff5ad9a7da03231f477a9e15351bbc2713aa5eba87466cf9a4763c2a5a44ecf6b71eb2b1eaa530f44e3f026d13c96ee40e625d3810769d467ffe8a54eeb8e39e9ffc61e3532c1cd96973bb5f6fea9a5b7064c3aa400a43cbb7aff288d3a1c7a072faa42d1c63d9db70021c82e37b9283fbdebde94bc14dbf514ea504b26409761c7679745ccd2fe9b004f8f4859c1c803f02c873363ee33492acf1e3d394914fe0f2e5b4355806ee47949c37f6ba407f5e9e43d03e433f8d265d2e52c6a972ce114fb6e0343a4ae693b9b22a39fe464bd6e8b219a2693a88ee04c41e3f3537bbf15c43453c4e456241fa0858b0213aba6d4d36caf9719b0c56011b5d92792879cb42515ba33bae4bacc67d2508f3737a8f1dd98707184a27bdcdc59e2eac1bfd54879bb8b7972e76403b9bcd2b418fc48f64b4710dd1aa287d745669a3e95e16c6eb1cb2630864dc249dec4a32643a09a042a81441d22b71f7471a40d7389036244bafdebf28169e49d050c91f42de2c080ca52dfb6473ff747f16fe17451d8e22916673ab4f463b89018b61b32c19cab9dc443aa53d63c0ac6fda727ce4f8a21de87e480049f883dac2996332ebef2c7fe680dc35f3a228a9a3b2a4bb6f3271c2cfc82dde2f66d484719ab7aad906ed6154314f5f29f7f6e3acc6d8f5c8583f253f2437624743dbe002bef528595369368cda4052c23fabfe8948c5c0caa593c27ce7b3138c6f070a193f57e408aa6cc4b40ad3b0b432edd93145057f63d075bd3c755a0a35e6ee50b56ae788e1edd00ca5930fe3a4037cb0480326ab1626e31bceee8e8bae6869e24cd2838801127a62ce79630f3d3c870f88030bc5ebe337815bb06a9df71357f0b476180feba092410c6b26f2c5c1e743ce6562c00940bc51739f3f107b83658bae86076eb592c87f3cdd8de45904f8f1e6e9764eb38d97f28b74bb1eb39bfec3bc107c6ee6cf612a46c257a8e0e45ac292719aea24e4a40f7816ae937666d7b18e37b87eaeb3c8cfff5b57c37f25b5b52dab2de17dbf3e60dea60692665646e500f87dd9488affef109a3f02c45c3b99998356fe7122cd7f20d8dff81b61135cff11891cd10513ba2609d04df074502879be567190802fb9bccdc5bbb5c1250468254d1e64af1635c5ee60e4b8f78ae57b07f861fbafa81604cc5a503f1445823cca2880ee8bfc56ef43f0346201ee46396718535e5a31c8420c2c00104fbe0594423501ece4ca159c4e3fe43e8944fa98ae001c85243b07ddf015ec550b85d682b13790096991d4624abe2bae72cd18f01d2a8163be271ca1d5cf4fe18f19ee12d1f3fa7bdb79352061e20b3965edc742465156fd290f54b211ce0fff9833b330b62dc1749c37130c4d7550b3d747e0438dc1efa8248056a96c7522878da4808366d80b55348b5427bc0b6c5ff0d17ef313ce85cf33eab0a90271688b8a1aa18d03017d3933ce3a390cee34731e8b77984f88186bc94ac8e49f137c052e8fddb557da8355035752ea4901b83a335e1d4221b18e22880a3b753a81654c7ff62c7693f40985e56f3eb7abc7c1b17c282f6e9844f64daee729cddee72bfeb711b3bcc910f1abf4d9f488c6999aebaa1de636286f1d71a0fe4e28ab4bfcd41a2a328bd9cd4e41973fff538ecb7095a9e6deaf25142a0661ac58a9ba73f7855ef2b95ce1f67987a9a5fef451b28a329cc37fa9f156c7eb59a7bd43b515d5cfe97166b3d20ecfbcfec097775a1d7f23216a0286353c3b04517692c28b1c2b780fa4cb36842abfa894d68900d302b91f5e83180e326864bbef1d217343e633fbacdd8f5c6c0762a5728d090a3b83308ceb5a7aee871e7cf91b0636fb606d8dde04be88c2e0b1458b7ef98711adc442451f8599fb352885dcb38eb650481960955d64173676472c032eb26316761053a7f0ca3633b9251f95638678c806530cd558ebb2cfcdd7e9a9081a486748fba2693e34a25c4ff851b045d1470c42ad39f958f5ebf9738c024d7c1d98c1076235fe0376de2f605e678661e52bc2b671057dae513c0a62c7769b7f0e1f8e62e6b531633727c0ed145074f57f251800facbcec59ee50f9b09e58458f35bf6c2b3992ba0aefc2a3e30c5ed140d8778e1ce0270e2f83e8e1760acab6db2ada8d003ef8a2a82436d6d3bb58f93520058088530e307f7f2c77e89664b27027714085e35bc21bf97bc98a23482bd41aa37f7f7c21ac54b219100f221a887201c92855bc516f5d5f443c07435a8814b7739038856c2d0549fd6a6b3318b9ce30e6196ced3c679cad5682def75af7b20d264eeeba0116850aca765ff3221a7fbcf0a3cb6893ce9787ab9b9eca41c7d4adc6d533fde827e8edf6de3ff2027a5a68ba7c9c62c861d296674dca734d21c5caca2a30ccd72e2d44ae87d240363d8c3d221ced8370cbf4b81c278774858a1ecafd7f0bca68084eb5257ec800ffee01451ae6aad8e29ff7fc031a8d112d0c3be6f7e97dc2cb59f1581c047beceb509dfc88c4250cd7f95d4e4e77f5'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '48e28aae0e484dd26f6fef79197147d1',
33
+ content: '1dc1eef251b4e7c706509ef745b76e2f085aeee9265aea71ccbe2c6f91e16c5b98d3b25c8215136544fb1addc1f070c51e214d1ed586ce3fd8f134774fa0ede091ccd01e735ce33b0dd0b7fd387ca64e5cf08561068228c226d26be19b819843a1d9dac25805fce9979af4f328247a952da60cf53868d509e0244f2fcd68fa125f2570fab63ed2be6ed60ffc7f07688ea76ee905f614ddf521a6777e4ac60231e5b6425f0fd267a3c5ad9547a93ed9050aa24f046d25f380b73a22ad4aa86f3b3a5571a608636613d6a25dae7f5638955b54f94d700c78fe5abeb0e7e7805899457a68b53642a59f300fbdfe4bc9c81a5a342eebf7474389c68ded445b615c481fc4169f03c21135eecddc46f42d16ec6cb56338056353bb08fb9396e2aa55c0bbd58c592c336b063a7b641f58aa54ed3b85cdc219901da060f88c4b622b258e1765427190cd3b0c1001847599d90f983f6f183e61bcde7ae549e158b8d53d3d7656163396befa6cea72072bd9ebad6cdc8d0ff37d8efbfa89c96f7c4b5d3d2d44cad237786c989bfb7f53ce183774aeb4120be9fe83b95d455f17a8166ffd08aea4df17a05e9ef6a023d60fb3e521764afd7859b60765f49fb27649cb9078fbf597d318d3c670385736639a4413fd940b40eeefa4277eb21cd7bc9c6a206dacfbbe0b0b28f3a4939d3a7799d174b7aab5d6409e65d4a5d61b66f4265923f64e72bcaa8f23d56f1c0f1bf84e52437a549484268ec93ad500132ed97a14a362dfd8559a7e11aba8c99389c57f0b0ebf6bc0897646c8ed8661f498d10307af39296049e035a9f23b880aa86603414883137c54e63b54d36e5d81cea39a742020f5686c1a18c0fca0c3acfec71572ac4a49b57d9661353d887a9f1a521d0a81c7fd28cb876921cf65f9c9c3161052fdf60fe5fe29ce22694adb16e67b2a4bda7e675c7632c035d3a67b413aac9b5651cabbb84dfd3bf690436fa75cf59d78d8e1fdc55c54581c31ba05cc4bb5893b4b82d975d88d4a441787db3fa24c9d5cc546e5c9059ca2abb45b705c7abffbb3dab5c3dfcf394dc45acdafbd31248a84a0d84c00e32693e373311c7a249077ca6c342537831eec9ca1be7ba19551cc3b95c6c88c04c36dbd77f826f0a1d327a086d4ed02960ed48bcf517d1fceb7c0a2589adef2b7e20be6c431b4ab3ac8edd212c4d53798480398d0a378c490e7ed39053a0091b7c5190dbb3fad758c865644ecfab6f2b41fd1132ccdaf25df007b0c27705674f3f55efc64ca024e22fda4fb0498e3c666682473568dfdf7063e4e0559d80070ab4ca93c3d0600aee71348ff5b826481697952b1edd14aadf910c76b7e2d2fd860722bb5161aa3583824883d3b4e3730017796e29b325d01ffb7410c834bc5dda0047fa3bf3f51025d20bb0d350482e8c267a66564c9c03282bbb9f9eb96798eb4730c75ec8085c8ea0822f94c3177cf23b81bbd203e71932b59046b070fede760bf2f7d193af167ecaad930ff253b02e02a4267fdc68e9ab907f47de94382291037e83542709d848dbf80d4a5c2f748b7efbff56d5417d9c64d9573c1714d4b78f33f92383a068389a757aff9ff53bffd531e376930ae3749f6e943779fecd3b9de8e06156a619ded7974acd65492e0dfcd1a1095ac7439c45e83b569f74ae948e556ebe314b333aa0c7aac8207d76c8d0d1df349beaf469abc6db7da095c6e8016ac372fbc537e4c969df53589c4bd5b82b808a373dbabce1a70c05fbf7eaaf12fec8636b217a95d8bbe0ec1fea6e7791b1a37b6ca4f2a98b604a47f61fd33689f2dcd1059b12b94889de846c64cee9d67a4f9f92d4a46a0e84c963a3da5bf067621a080c010518cd729abdad10b6192a2193a0e1ffddb7e7358840add389461d67341364649d760d1a9e98383f9814fca656293385cffe52f7f206ca40c4970914bc83c344421b2ee363c3be72115dcc3e93f74f7b7bfaf5198fa11ae92b0603cc792c958f5744bb1fd8c3e0b0dca9d959217407ea6ac8ee8d29e26240c9053496dc23a1b758e514ca04326673922b3c8946df522409c50cd4b925525c8d2a1ede13312d3b0de61d31d6f5948fba88a91fc6f8115efc57f72bbaa40472e292191aedcfd14a9a716700b5e2682b3cd6fed376b370300ce8252695c266e31818117d02aad4f97e666a081729e727057f432321204cea82b0f416379b8135969698c8b389996d50d2e47a461aa4fbe8e5d93b8c59269786fc8d33b511d416970807c9dfcf99124f54750b472a05f163bfc68370fa9372b3d352f516c4d1d0da8a0e65131b76c837d622456b85ecca7988a5ed74e35127d9a9c857a1b314b5d4bb6c8c80742c53f8be5629111d804552b4ef14392b57b3164687b0eabc91e56898fc2b1ae3ecc147033d29829cd0250a3aa0e36670b09395f7d1ad355012a803c7f8ec7cf4d01b0901fd8552af7a02883448cdb8cd5b478da13fbcbcb78661b8a7fef0e171e76bbc39650096cf981728d6dc04707ae88ea10f288dfe40c595fbcba026eafce9f9759580f2c0ff6d259db10ccf6c39c1fbb9e5b1768b258f8b19ff3b9fba297bbc0b46841f811cd3e7c116655252de83ce6e645ec35fe69c1887b28571c6df53a9116411d84617097fa72afce9968503793f1503cc5d7b860e4ab4fd1913cfe776ef702283d0ef34a3eb17e7d50709b4afe44d8121a400eb5d90886cd1313c57ab65b3051a50a99ca4b665f99dbc6af90ec7500fafeef7a605a70ebf608f3d4ddd0f2adf06667041c0bb4faa92e177ee3b0c3a9614135315b35e4b3ad841cff710fbcd3fbd54f1a7e411275017b78eebd40a418f12aa2e950868d3dc58a5a2a5464fdc3641d93a5438a8052194d71233846a82a6c20ba80ee362fa82c302fcb5a41f864d97ebc022fa2582fae5cb02c97d285a2aa295c21dd12fb8dd83de903b604ed243f3b5f919ff79ebc1304781d320804fdc14a9c4805dd8693ab5d65653f4263cd1dbb0a23533523d38bf8d74969a5ba30625039b7da272aeb73f775caf8803ac2a71be0f843e6de23ae29836a2094ca62c1ce1200025d208a68c17a0e31b864ece864dcb92314daa2efd893ec7b7959930294db1fea63f9aedd43b05dee2657acc910830ce2beb2a4c8ef9434b874366167e7f047a7c8ea0c0c249207bba7c06f596611a03bf7cd2a7e72cfc900952871422f242d2123900e9b2300a944988d72479b1648c9fbec6fcf2113ac79f7ed0a80623d25be8f40938c71b53cb05f6aa85648138b3f0276279d2ffce6b050a8777209b9823b9b077d9fb144792d97b9b19a18bb93a291cf8863d2d07fcc87e263516b985bd5f5cb3778771db7d55531409851debf5695f67aed6de683d11b22614814a7eddab97f282ffd3e3b57d7043a553de7d9b1547aa5fbf81426f864001a202a48fc2031173ec234d66dc69c1fe6355341e97c642b55655ddf2cae7ac699db00e09242d1908535015308eae4e5afdf9dc47772329d9af505a2593493565ec8fe4f8c303f532b9b8dc0f2743baa8da61bdd08e5ac492838a51faad30ba58ee5be6b8c00d6734e7c99a912b0b44e56187991be9f1b86940bcdc1fbed08066764094fa392b1c6d0eb45b5e98c222aded015c506b4841dc25623df9b382e1dfba6ccb2b0649a11fe25ea50b61daa9f3a34656b9b15d5fe3805607575e837bb9ba79490ce116f8c0ebdddb2def50b65eb6f71d99b267b6c484de36025b8336ce909fa1903be58f98510a5ff969ba32eb4887f7382da7a7661e0313b89cfc971ba7fa286e9a67f899fd40728af01e65d21f58ef49a85a20c30dc3cdea24b08bb92263c28ce215cc038b91df12d477cfd75c104ad6e09bd7ca6e8940546bee38a01f23f4a93f195cfb81a6c82cf5f5f3afbed5430546df132915340173b6f9ffa5c8a94118477d9d4416f942abd3771c81359789e902460c956515758540a07eda6072f04b963c991fd7d4c5892ad09c37aa14c1b3d453ae97741f7a2523b9980aa834028cbef8052495865b52d9175b09ec953952acb260873151e28b6ddd47a52f15c559c1874734749f5f476ab834f7cb599eaf0aa6585d76603ed573c423ad0a91d796e61b1992456fe3b964c98d1ef4170e655214e8f44833b34aa4cc29bc680fc19847d2bf761e2dbf50056d7d510e638054ba7b5c01dbcc545dad58665ae88d93229717ce7f671624a72b6a705b11fc340b2f77de07b7d78ba17303c7ad5edce96b235d460b131dbf3aa920fef02defae8d4da83d3e208fd8b7c6ba746094033a6a7bfa37e65791045d4be6daca0d3dd952a1def1f7714eb092a12c08423550ceabf9687e1ba4a2c26fb9062781c8b3479f3b826e71f7724474f5142b7b43361f1d4a5458bf14314813af889b87dcc577a0839b07e4e4ca6c0f6c4fe228cc6ab9035093a83244adaac03625250ed8cd4c14a50de777fbe0a0f25dd446b05a2f34391feec0585180480d3b8e3c7dfbe7d6fdb30ddbe128be79a882f6c90deee0edab317c110fc64e97f721a8eed83c8239f0139ad0ea9c3fd22b8af5c19a0977efe610c4ebe01529635261c9e0eae65219a33900ae853088b7cf9f02d1a5f5f13747239ae982f81f5ddf0ad8aa0470bd3fb28a10c07a6a464da948757938bb9a4a3e418c4140b6996b54cabffd08ce9337a390117e52b0c170f49f1a995936ae1dcfac65eb0518e8956efd552812c25bbe789da5b1dd7ab137e0b47174fa1a673a347815c267ca5c1b8739dabff822f96a0f6ebf9d0c83d08c66a5d05dcc3ae87e9236ac310da18da8296eec8197aa91f271a703e1d2018a68b0548dfead58be59001523ce39869a4e56840d0d2010a0ac83365cd23c36e18cf8bccdc538864bf0ad2c2686b0403a0b59acbf395a6f0b7630240549c5f30ac76e530264fefe16c94b2ccfe67851308d9b99edb9f86fafd6a5aa5db804692377990480a97c9a1637742a69b7f292df91ba4e8bb1d38719b76252d7076136fdb63852b594bcd8c1970845ff7c20413b15c3e20b1919897d7848ac763b502404d35a84b88741c3666781913c81ecec8b13cd5c67b775bf9825adab6393dcafe300c0c5be111e6442c28067699ab8c0d7c2a2845809f7a417e07ad03c5ef3497ed2a9676ac0c8d42bc4b1ccbbfaf8cbd8198f0051b47a51111b1bc63b4584fa9231e538cf1c7e0f9175d5942605071298bfe1341e7971eb8ce9f169ca4b44d9781f97c278496f53a0a963937ed78c965300a63d20355477337459b63097ae3d832e345213f4f7ee84085ca262e840b4d439c6eb9e6d4bd9fa742f5a1c9d568f81c9e6126ee05f5fb67a12e3103f5cc913ba96f0a164e0d5a8c3c7209a8eedd381f0f7da659c06ab65da91b4469e27aff51ec366d9f1154a1c0354530488554441ec20a78caa8460076ae23bd8e150c6e136ff1e303d75480de1925940cd1a121415116278cd3504284a7a1098b9e07b672cf7112fcb70c3908c1125b8d3d8b1c2f59af0ace262800f3db76462dc3d37e32c619ceb4ce2010f5663ade11c346dd6e1e221fb063814f45d72075c8f7d3822f3da068db66f1e4495a312fa466e6e7bc81d4b583401a8c9bb0b2a4d849e457ee96d037e99bd673a069b15f6ea983e88085dee1dde4ab212c7f6fe420403e3f08a78f21d3cbf05af85210b92bfc388c5f7289bf61104f2ca7d2924c5d442350bc15eda00441d9bcb296a6eea6dd5478c328632c24ec73d1a99b185825acbcec26b7a8e4613f925057a4b8846ca7d5d467e2d8a95d107e1122ca73c98b90630b1cebe18847d89e1fe18a94f1fd7f1d30c4e479fb18f438ac56d13220cd71051d404ac6053a12881bc1b9eff403b93746acbbc72b6efb2af27038a6283c84433bee990e8fd59a8591273d60ad42486914f11761e4dbee192b378829bfdf2ff8c72e249da63c15dd6dc0c189abc4e939b6f4fcc7a8b0d59dd9af86489c3a3d82d70e9c451336502390cd521c7db37d7d3deb6dc12fc9acbe4faa0f33842fa927cdc74f8f9e42dfb551d5ac8fa29aea812a12fd9738807d158697a4f66948542487523a3c085233129165552944c340666b3fa8a007132823e607065adebd1f90fa7f602bf4ccc065e88ef2899e8059ddc42d1bee7891b524d5c30d0368947db52b0988d6d7a9e9cb8e8b293b93d8b89fcdf3db31ad4ac02619dec6327ff646efb6e30bd73f005b660600c87eb0bc86d546cd1b1f36a87fba6f05f3679dc6a1f978863b7227e1202087e7c659be8ceea36e776cf1f6d71104c4d92ff30e0f22eb07ede8b8ae56c7c2e591e47a6425e6f61682ec69e1c8423a6570a7b00c3505f2cd9c00f74bd3fce3f74148ac497404b294a873b1f169fefbab38cf73807f782548b9df26d181f1c98d9f966977385c48c61680ca74591540d7765240b2ced3f1c8105c0468fbf3219dc4bcb65e266c4372c4bb54d3ac6effa5e31162838dbe8106a26e849a6115532fa001d909c0bebb2393d12c79519d44a825aa957938fc9724a81e5a93c57c28553c4331d3a19b2626a497118bb9e56c2613133c0b9bb871a1b8f61fa1bee1b13c71bd1bbbc7468d576fc70a57359cd4efd47b14940412b4feb0188d746c432b0e08369b123bcd2597fec48b2086b170c0f12eb2eac7db658ced7f1b79c4f3f033d6a078e77063cd905ba56305468cd1851850d0e13879a2d6ffeefdbc955dac754c9d2c71e861743004617b167adb890ad2e564b987707855678a669f74e8d9d59f9fef80b486f70e98babf48ebadd22b225535d9c0c41d2d7a2c744b81d1cd628adc5ac057ed047fbd0c5d3813ec1ee61b7de2821f799f3810dfffb1f015b8426f0ec8358f861bc0ecd099e2476fc26250d1ed019542ab0460dfcd9df6daef2c086cf6ce2e72e640d3ddf71130bd2f60470bce2396a886ed5b2e837e8aa59709a97e39f6d6bf0afae72928d9b5e5e36bbc43b8cf8b9ef5394a32324f53c16a6f2c6191bba60bcd3ac4f8258ecd5503267c8416dc7105c517e029f02977adc155f127dc866b7140039a3d75902d8a8868a01fe13a65b15e49b0e27c2c8e48d1f77347c1a8f1550cbf26a9305c25323a89fb6a8e023e8d30324d8972bc6aa589bf9a65b7d7a5a00e3402a12e4a57e1790533618b154b2809cc394729fd36e1f92f379288fcde2e35a57a8ec4ccff8fa5e45afd081bb129d533b946885b329df1cdf2fcb2ac3a2a7cf6d3ee98ca0902a4761e7de2a41987322ca85cb9c5a6f97eeaec63f5c59ceb9cfcade33fad833d6606b75b9b70db3f7e86728d4411a82e4f32bef920b8f0e99bebf43124d0c8be1e373fef8b57830e07201653e39b010e5290c0b5134eab8716889f5a2ee47eb97d6e0a5bf1ea1f2420050067a0e435677fd5fd166e7fd7ef81a8aa6e47ec2924729741e1536a85aa2fc8e41d189f08b1bf807315de9ed89b2af76b2ecc75e8a59555c80935798ee6f587d07f79e26a7525777857b270b915f2de742a966f76b1423e155b05126ad1f40d9c6a70b1f2fcc32371b9748f8f2988ef0b8afeec5b8263ad80617f933dd95ad20c5914a2051a74b4a66b5529fb68e5a6c96f1c6111ca2a84fb5702bfee541de7e636dbd7efcd89e4a7f623621148117c8272468b24838539e44c879e1d1e6904ca9119a21767dc5e9ed1f5bad5e55b79d4baf5bdb302a732364263b7150cf206b7bbf3fcfb43d69c319e7d7a4fc955e5f2b4d4f6b116599f29189621ff74896f00ebdf42c1e9c4d6afb0da7accf694337898faeb435266665f67664696b9fb11be396d4d4160e5f9472738d5942eb78a4da193ca9bd79423db8b56357346b70a48978804cc71f52fc38edd7a32911c984b74ce34c2546c9c3f643c601715c95e5ae41dc233c6442423b177b82e5aa0b6b2663c33d37ffc7f878b4a2175438d3e2831445bf6309df2c9788f0e12159f34b9fc6884fa35d3d1e2ae10c52f6079057b2df39a3ae841cf3451d30a07d039b133af7760c29bc1f46814780cfc320c287ec58c151500e226a302e1e378e86ba770f75a6b83a1bbc65512a78ebd6e83c28d78a901a514a162d9adb65c0c8d7393fdae703d0c4ee5f2b4c69be37d3739fd5585c6262999124b4915cf1bdc4797dc3f4b0072ded23d5537eda8084bd826293b4ac06e29fd7f50a926b71a6fea302cd0578dff29a3d953b0b552208aa280e372eb0c9d42e9a6c81b62c01786a0dd0ab54ed6fcc8f3ffd3baf3c56f9a3f27a6bc5cbea2c94c882a4bd3ec81ec5686df9dc81acd89470ada1bbfd6f34d9cd7f7af67fd1bc489f34dd14be1724e82f81328e3de1fd2e9194bf2bdc2970ef0438500421e8c47493441b2139ae7f6def3c30f66e1346b9cb493acab2ec5169b1ce833ef6e665bce354c1e405baa9705cbacca7cf5cf41c55f353786134398ce1700c1a2ccc923203613033b8c62dd02429f04e1de8367b4b4bdf70a6d276778e5d125c8a36c90128af49e3a35f3159b21a2a5ad7c5709f0fcabc004e8a1844bbc3bd675b5d4fd0e22336b5374943f8e340ea5490493f47e246799a4ddfe48384eb1ec55a0ea3654ba5677fed776d05a265fe2b2840f24440781d046aad779ab797cabf30bf2cbb0087f106fa6ddfd750342c838f1c6e10a31bdee16f418e405c9d0b074b9356ba92d43cdb4615c6f3247f23f9c7cb6a56df567ca5bd043b951317d3cfef6be5f92068e8531d49950570ce26cdbfdd0db7c2eb46d31d6805af4106690cc6a66a94c9cc0860fc487f9cadf14e1410c1d72ab61ff85330227b008e128cea538673705e0887ef8c78a7d4e99250578116f3ead0f57009a0d85f01192f2fb1545f9ae294f5af1e5d3e3b284d373d7fefe61a1f15e3a06b36b0f651dec178fd778f79205dd5638a9729c2a8188b59ff7e49b26982aba51af4b2c28b79e76b68e388da3223f5a9896d138d4e010ea54752d73f4c7fb4a568306bd874b895d5c3c371a8d228d2d254ec24264cd77be57946e14ce13b33ba2b2709f9841ff67a0cf040c7a1dd6bf3a6948ba68da4ca19688df5b4920442d1188c78c06666e1cff3a9f9101549634b16d59baf6ebf7254acb81801f0a13f298bb88cab3118c8271f27cc5c5925289b600da2ef3'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '872f1517094feb62db8c6d0b5c932cc0',
33
+ content: '5786562ee1e58aa8c075a183749d557e9f730f333779e75e996570cf8584a6132426b2795ee72a11413af247ecd07e46f749e14a29567915fabfb673a86be9720c6ac664ae731581fd12c64daabc6de8522acdeb4dced55242539a1e65ed14da13ce935c51ac43f6fdb789e7a975b5e896acb7d4113b40753689e91331963ac7c04cecc76bf24b02edbcc326065f6f3e655465f3a12d5b5ad9f8d7fe852e858b7b4437aab76074bd9176a967afe349bf60ca04c34203c32ca80e8e95111d14d1b89a53083349c817f52e8cc7df412668abdc9af769a29281e135851898ecf71f1c0e12d92bd27d5bbbf119a13327697fe5c6825bde91468f4b19ab63c148e6bf17f0a93e0b155a82ed2f9baffed244b384da02dcf28f45335ec8dac5d034f20d8d29b6bf72aa972dc1c390ab990196afc9663b60591919d2af0065f277173bace495de89784a1bef309bb15410a25e8b71bd2494b7519b3a147e5a1a0ae8128f30804b90ff4947bb94877f87b4a12c126d9c1266e75c1177a71816fa67b7ba0510ad4e1778dad8358ce6f41fb27637e16fda7daad99e7260b65628f170081cfe9939d61789fa32339dd4ddd5ed414c988310f90df440b3b144edc860872037228734710c0c4ef2010d4a40bd86b6c043688763d111526fd409037ac411349e2d9c5c057963ba6938a9f4946304ae6d24f38ac049aa72fe87716abaab4abf33c022c150f6483ae6030c7a23d4349fd88394f8d85f07b29c7ab55561f9702c3a6a2a3e352057533cc9e53df2e5fe76a2f13d23e35c3b700f978d6b0f937d445fcdc3514f787d357647e786dd818481aefb390b798c02eadae9529f73bf219c51a118b57d0c16cdd93aa09c56dc0be6d21addae36c2533fe05084ab7019db375abf7531cb061cda6548a1606c7dd987997dbdba3dd2e2707fb2ee07d393a0a05a32f0053d82144178abc026e9d518906907d710018cafa00a6d62aafedf38a9bad58c8d9a4f7393b68771e4ff377ad219abc21f826ed7a364a4bded13f71f9de01ced938f857ad854428699046fe0b0a3496e71fced2b9b24e96d772a17aa85879bc66e204673b693fcede53aee7f5c1b3bb8e1266c70811f3d21e4f974f32fbdab462ba5d160b0c7c1c72cade936ba3f6bddabaefeaae9d9f9ea4921df7695941e3d38ab9a44fa02ff95114b2a8fc4adf362e33cfbab32985e736a0a4640818b5956791910aa1d13450ca7443594672f4e8d307953ebb98801d6f19e413db94b0a902c2718ba43092fa644e51a3425a1da6979178cfb10ce5496f2cdf77ed0de6250f788f950af7ee8d1f69bc49fcea0cdbbfc6a25e1eaa4dd794f9f1a1fcdc2a60a758c32e694b32bffe1cdb9f1adb1168ae801687470ca5a1259fb025b7e5d33a99de114ab1fdeca57e264eaa3af6879a25b3f8bf670658a6717a3502782e5be5b85956ca67a027102a8d9440a546d9bbf51d7d8c62e305ac29e3fa40846a00bdcf119df02795233099433af432c879c05cf4e9d7bfd00cb52d5d8f2efc125eac0639e2e9694cc5faef1b3026fe796bc3163e7112ac5415f5813f610b4c1168d8fcadb1ca01b0e002c09f5d8beeb627ad748c644e5aadde29836904a6f44aa62fffe23bf2f0d075b589ccf1ca23af5d5348915905b0a0c49a24d1dbe7de6d7b5c1ab2b1e1f1561c08355342f9f28f3a0a806abc336a0de82337b33f45849a5f55becd40f2ae1fcad9655f8a19b24c101a7aed2de2909cdd18dd64c3253f3392ce0752bbcd12ce247aca68d9c9e5b9a022723e05f41a4528416a436df2e9df94beafdf67f9e4a51074733fd4958297bb8129561da2dfe3d319be58d9b2684564e641b98993f9e47745c6cdcf3829c8f27ee5a4be99ff9fd2feb986fc28d3c2a9871720076f1143160485271a89f31715f120d1e5aee5d2703828c5132ceece4e59c35d5e9cf36d5c030eafa9579252d6bdea2b50b7afa03ba4e797b31cb993d5d08b12c01acb74a8fd8a0cb20e5289d8c898eecec7a8f7ee37e23476222609d681529848fe9a551d2532388e1e6f7f0c5b3d467fe24c27f83f58e172566292eef2e38aee64997e19a5770632737356258da74244202a1bb8a69a0db6f277536d7ac40137f090c791a2d4841ce7d9eccf2dbc0a4e0effc77eb6f87a3b40fe4322134db7a0a8e4a175d0d82c08c7e6d16fa865a06b664e0da4cd90134b938fc3d88173999fe4181c1965604b557283f99569cfa14c1329c481a73b34009cf1ba7ad5bcb77202ee6bd159e33ae94a2711728d79cc2cbeba67f65cc78021b07320bff05e112bd177967e9194eb3b063f484225a3b6668fc2bc03a6fe35936b3bcc01c'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '9f8ff632156e21bbcfc47f5d1657da6c',
33
+ content: '324d87bd3e3b8ab460e0c9be341724fb13e57d7cfc52099882e9fa40b5a62ebca273c41b3d20636758afdaf5b50d609aa3488e579121efec623ffd3c527f62d9480dc0789c2b4ae1b348ca2a7172137bd37273b155de9bfffcd7b791803d4b9192e31f05286229805fd607142092fc8514b385ab2cf599a2f15a1436331fff82065602097db439fb035b16dfb104a545a0022388a9ca50bbde32c21736599052589067b75e8512b9c3dbda8701638f22dbc8ecb317b63af026f9727983b08b3d0cd583b802b0cb26381c1c43cf389dce211aae5ad62593c67fc478450eb5ac41c7af92f4d156481af56711b775db1e78e2ecd364f5a6e675f14694a2a72ee68cf1f383055073c4f5dced15648b0df61a713c10e9da1bdabc04e1a5bac23de6d263dc9b6b140799f46b34cbef7326c37eccab50e696938513f3a67e6d87e6373f0668dbc4954f4082da509d73693175ce3294a396d62c3032ce0c4ae5ba64e26a06b499e28e9789a02748ed876fa41335ff07f76848a024945cd84279cc051cbba0a07a811f4c8e9d215cac3d5250695931ae0b9bd57ca009876ce5b73b1d647600cc3e9e374e896ce566d33ec99714c5b1ce0ba7dc4b3e95971da74afd3e39b2b2ade5b72f5e4c88957d030fe92a418a8e0467b31040f0f97fbf464d6e175accedebeb7f8f9990fff6761bd4b87c14f998bf7f539da34742c1630dedbcdf4515d371df8f836313f0b6ece7e2574ecd74282c95141f93a0d5231ec5740db4e368f3e09df93a7f74d549097d5303f662424effa9c62198b011d45a2b008528bbf35d33f5d8a8bb135dd15ecd824b100681e8282243e03df37cdfe683fa0c87a15ad87032b449d3f26f88eda07f8e8ef75b06470e8020e4fa202aeb4def728e1277c6b8ba6ca7436000acc8d9938ac9fed51cfe2986f6507a03278dcca0874edc18912f5d5a37fa61e9707f4c4ad4fac22a53b7f60e2acfc03d2eb15cb762d9d86964c308bce89d4fae7d664cc8ec4b08b3dc07639c7e4448059a87f8b6a31a80c681b92cf1c2fe87738ba0dfd8b9fc87158399e835447f9df36a86a5c969d18cee14f929950ca88292b2100d0d993d1f25191a42c28e01103fd91d55155ae6db76c21bf0930bacd476a7b00b55a3647cfa49849ae095ab7057e1490f536784ef1e80b899aa313ccb4c7ee092a500b212e4345635dcc6003643d64404241cd17775d6e604b30404949fc5904f8ff675267ddcabf95c6752d4c5fd0fdb1afa79944ec0b4a83a89dbd87f1402e5e4174f93fa5216f98accef216d7284126af4846a206f3f3f4088b5b9639511e11dd3c1b68d7f9a39723f71e05cce6d33d79bf365a007bc11cdaa8336f9ad7158e584f85c05141e33c7d39a689cdd89044615056ea3bb3f3eafaf732c9c5ff51083a715d2591a7fe083ddb4755d120a03ce23626973e417a9e7c5931dc67cced4ae371c3130ac7baaee4339f8623667e2114afbba6f82af11823a2496d8ef7854b99f4928e456462afa8e419eb9c6dfb24017d28cea08783583ab861e1c81a6fe517d898150f8a0da8085a5808b42269c54362ecdaa35ad302001aed065c0f69e6cf4511270d5782b68ecfdd5a6a14d92119fda2aa5161e49d2fd0d80b83ce04394ca77cbb3966b4b23bf68d3e2fce4600c925bf1d1f7106cdcdf743690cc441144389ab84db87a86839b938e1964932381840fd281751afffdd02ad05c3e111354f780f76b03d8a3f8153ba6b3af27ca5698633b6087b01a78765366e8e69cf0b7a79463c7ac00d3377f628b4fceade3990177be5139ea339f6aeed16d8a6d7bb9af7992d57f797f9456a4f1493f27a66f04bd5a6f74fd25ae04909342ee6282cdc5541ee4c952c0bfc84de43b238f30f13ad58c9a6d8995f91f7610098768f57db55c6d28b26449985a3412da2faba9f1a364ec5b69156e5b998e6552ecf19cc9a6ee5a43304e945e6f07186f29f332af923760abeb67d5a9281f3f5518f28aa69cbeb5da3afe8d0ebb622497a7348be3504f7624755c748f50eba6dbefbaeb56fe3dc18ebf1987520d34a23cf7da97b6f9c74f1936846ee3ffa8b5e861b861cbfc39ba0b844ce745f2bd5eb5904cdb9e875c3493751c3c3fd0e51d046ebaa1b0ba8b0e4c377da265958324dbd7c5d81075b8040a49df756ea19230cf8efe6d1a6d6a4ea6ca0d515d321779cc023e51d172641a86f505203b15167e559aa64e874c88ddc1025a877c9915e9c732fb03b9b74a4ad5c2118db1765a55a38037775dca4513be37440c5406c54d4ae39c9c80a454ebc86ef881fec6682ad658843540b891c81bedf5f82a79c40f73fb56eb40bc11ea00ebf037d27235f193e20516650fc310fb824b44e3375fe093b97be0954cbcae0d772516c3aa818d64c6e894c9a854b0361b7fe71489830a83e54d0ae61f158bda3931dc9a0fe674dbea9c211ace504504f13253bfd76527fbc0d072b17dc3064a8cc105eb03377df39820caf39d016d7402a98c2ae754d6c6a7d6d427bbe6ba559daa4bb6f5fb189d276d8a88a419d546a9710aef1dbba265bf0d6decb0eae34fbb392ff70a7ca53f8736c289d85e37008ebe79de0c9e17d26ecff655dcf43635b400e8d71f0ba7acceb112dfbafddca24094ddaca0829c012c73f5c516990e3dfbae26d472b8a0d633b7177e5f5bc6ad532a5810639717814c35d076b88bbd1f913a82118c850fe6965a851ea750a322b3d5499abde5f97070213b6c193f5b0118f356e03907081d21ac2ec87263b7c464eb555c60a92abf541d7e987477002f6d319382e9cf35e3a114a6d44a71d7efe1ba8d88ce8b201694c1d8cb257580652371754bdfd0e9f4a25c79d4255119d5e56491cf8f8a4261b1da871d16cad2d739e928c84ee270d58c0a95a33b1a64f95218c9cb60c14ceea40560bb73e47ea2165998bfd8acfe3288f1f97b8cc792b34c14b010b0c9b96f743bb733161d76b869f09d520e07476c2226bccf46064043aeb1cc7b40aa151d1ab799b606936fc00ad5144d1bbec817ccf43db5cc208916f432f681e9ca33f298562402d8aba197536fab3af4f75692c2735d42495fb9f47ea8f45cb252be17cbf99e1969156692d108b0d3ca43c9f87a371106430031daaa234d8a9b06dbf6d29f1131da9fb6a63e9fb28f005b2be6c2199f69c2b6ad1e6b2277715648acbf39fca8faf2982ef8255875caebc8e9622e9860a2259606f0535b4b896b14045985ba79e73e6a8ae8fec83b46659b189ab8f76f2b34b0f54b927e4d816a57506c1ab6f49b770f3e9d93511d2fd0304fcd83b00aae139546afb87e1b97bd419efdaacfd84b0e26fc4e0275addd2420198bf9581998350c4ba6d43ed68e688520d6929f851760f49d094073d521c0e888eb1ddc98290c68da8958798f6b68eb3ffbe54ad5e0654fb0e45f88de783866fae607bc5f280e87627d8ec583353b1751abe462cb9da963cd25ae361cbe5e479c3273ab07919008ae743369ed0c378ced5bed397decd17bcc0a6b67b3cc3eb0942cfd5bdc2c038ceda51cf3fbcc8665cf5a23314ddcc7f1a90eb42f3d5639760668cf42c63c84b869c8c80903653c16118628af2cef376b3a8be24c6ea46467ab7a0f746dc57ed706a5f4a98b3cc11d95b7854360e7b95e1790b23ba2b9049877b064d20c6780b13360b3d637a62d461a9709a0dd448793d8030ab6d0497922760b7de6d8e3dd99c2b7102e04ce63e4b4c25238f4f6a856f1e42aca1ce591b2e1b8176bd70e3424191f1e0cb5b382059f5252581eb4f2709c73a13bbce8337f403fd0ddaea1b2dddb88f4c3d5c3ec271fd8e18eb86568e694f80f6f07364671b5ce0c8d285dcb31fabf5a8d5dbba05945d985d323e9e69c213d578a697de3820e0e4741f8e70aeb2f5e202ec997b1ab355645abf09e8f2000a6a83a74d5950199464702d37e7e024f915ecd8b92a36e987ca5af46dbba8615a5cc7453f3d84e86ccc9725c7f4f3afbd5ba1fcad6c3051aec81b272828f4b0994afa1736df79414b107924e6f77d1e2d2490b69a0a88a761e9eb1ff7d9fc5b856d396dbf498a47ab8d9139c20585cdf37680db792f75c49deaf0554a1931fa6c787de855136c2aa127d0f0fbbf94f7e790de2b1c3ec198ee7c308a293e76dbb8c637bef1047c5fa6815831a50c1c77bc0fe50ee6186fedf4a283798243efe5c19b881cdfbfe9139194f08814f4dc8fa0772669f0db7a575f0dbd1d526799be060672e16d5c330f2767fb3562bc5d84debffc6e7a2685f5e8205596e2862904b0db36029fb3938cb0eb7ecd61940a87e1ac595ded334e08c51b8c599f40f7828c03034bd19c9324590be3b2e364637a414520fd111be6f38f8e91c29233f677e74e89f7f3a9f52c45ec945cf5600c3be8a38eca9bd5948645e5f423e41f9828d28c08b9ad82ac2d407a10f64a9566fc5ccbb17601b120804a43b3debb82cd5d8f65c6b8c7b81fdedd98d458c54c25528b30c13902acf4b26e364cbf02d689eb34d58c78c9a6f63bfd2d6c3a3fc896f982471ef961897f8029a13e83b44af83fcc7044e078aec2acb48623ffff7130013dae6bcee6520de7822fbc2a310290f6100ca6370b549bbd6d67cc66d6643d2aea4218da140da8d76275dcae6c292a35b1415ff251bfde18c752bbf1b45f0a5fa87be02c0becd4e1226b0168370eb9f821f3477f8bbce83f6ba5de9ff65d24187aab129ee94215961a21cc624533393a9cd4ffd40ca1e911f66c81368f4fab23dd2f654f02a41c9900cbdb755c86335fb9afb6e4485c8955d7c2fcb5b9eb31c93f0bddd11d9645bab14797398f48aa12cea2d97a4bd35ffd5c94a17166f7f9e389875137ac1f683fd5f2c0265f4c98e3cf6ae0e4c30598bd18e2ee0efe55d309a170838efc4a44329f4ba94b88e8a755043a1efb7b81ae51efac151152ef6ba43b60b62cdeb7b41d65d77a2617b27aea2df9e5b1c85362bd538ec4f84e61facafeefcb0e3c192097612ed60f34fcecab03fc6d4506249b0fbdfe1822841567b5b0cba87d124abea6e0d0a0a0888cd0c65a8fb40e7eb96e83454cf0c0d3caec3a98bc37a91633b7646170c1e0d238a793b5a3416b7fe8b6e82417ba6679fc0f8c13485f4e12bc14ceb52f7c333a29ac8ecf8bbf3ae239114883fad7ce0e5b851ef6d266f92256d04f03807fb1c66d5290cadcfb8e79e3e69c18e33b13d704f9cd5a1cde5c36b2b3b50576109e451677dc00262f6ee6b83eb73bc8e2bf59e9f7d97d8c96550ba394f10938eedd5f8c38049825f0b7b22fd4cf78ef33a7759919ae537e67f32029318fc1d027351249a8e090d9747a0d0fb213969f5d2dc3c6fba030cecf1aed8f6fc087b58464f9b64b520295d89f6eae2dde2c473d2645d77df3641f0687611667cb17d39ad67337c5b8bdd156aa6e1ca09ec7211ab246025fad3622220a40c6b7ae5585f79dd9c58df07efd4362bf491efcd82b102957fc03bc9e751bcb519dc68b6172319515c66bce7f29fcb1be6e078dce1c1d919921c1749ca197a7233ce0bed0ef328b828c0b0b8318da8a5d543c6542c2557ee11949c5b424b54d9e71d371d850f2a1448c49a5e5befcbb4ea7babc7f031acf42b4deed22227cc35f9659e3be8e54eae61536c4a21ea216be55244429395e12208c7836e48723d8834e137a5dac1370e09fba50fd7a19b6e2be72a7b369668f31bc976a36141376156ed6277a6060c8c0e7f356722b9329935f3e6d8fd7dea64921271c7f1ab5a62a5b4780ba3713a9093dd4cef09c41cad3ec94c8e50c2527beeec502d845aa37b86bee3ee5c500ecd890c2a00ef8e64bccc4367bec0a5e469e315f234ab989f40c26c86c386834d24da7405b3de371d5a993d71cdfb86a269c4916c90febc41197bc57a315a701fe807510e894abc541a2ba8063b8db8572140675f8c3536401414f337b444ee1e87bd19e30df36ad9b9337df745bde1891695ec3149b0974d87ccf775e68a0796d4a4e573bb4cbece1622396b0c73cc5c98413c022cc1423ad3cd28323ae41909e1cd060a6b1636697bdbe0b9cc0e55ba2a092e63193f72f8bcfa2ebb5c5e592d9ff07299e639395102fc24cc086ae2ecba838c43410cda330cf5b534a8b7622144e0b8ca64a8d707efe3dab6d6305cb65ce336ea75df40f78bc09d8f8fbe7da452e2dc9034632818ad385462a58eb484cdd2ab327cd09e7747681c3cc84698981d8334790b0fa481782e0e5d825ff55de851cc24b4d6e2428626441a0dd619ec42101db770ea90370bf5b1592ddd88a1923462a77fd97d232a2de14f05a3adbf20f76d8681a4a247ba8707619ee27ef8890286b3b7c35c7bc6c47ada97b26309bfa44fa6fffb0ea3ede2cf018a385caefd0a8c817e1eac1151f6d1e814c61a91875fc2ce7bc9a33c889be475f1c20c5bf0341d9415f58e3968c20a82694a6814966d6a74cf170685e819aacc6b2660b57e8b3a864397c5e9a71f8f80ee57af38eb211de29d91771be939a0f9fa18ac81de5ece801fd1c86c832506b1316eb71ca2fac596facf6f8aca80e6f9db26e2368583abfe8b4f10ce5ba6ad33eac21ba27382de4ffac2461126c35ecc7e4acf8ed3176fb80b0e3a9b59f5f906a31079c597bb1fbf576d58656a39adb6c63bc120567ddb55a3d8c66e5483f0fa0bfb0c8f4639452ade96bc94142dd5e07ef054d565e6d3b6d7367cbbfdc8cfcca5c4b3dd7eb20ef0fe51326bec70c7c17c702f4a972e58fcb29618e232949d0501d4e090a48332c98c2d2f30088aa05c085fbb9c9e70595dc5f1036094696c616b68f02ff20c22ba73a888602876b8905cd5fdbf3a47f1d2bcc5d76d26bc563a0c99bc35fdf0cae518f7aae8848b92c1991351fc929983bdc33276e8f3ecb96efe47b053bfa8868257118d4f8d4fba7249a23c4b7c6da7f1168c112042936539a374477acec21e9174d6fbe9f70aaf1c85b385edb9a0582dd4eadfb7f4223c5e24202b231e7353313edf63cdadac142f22d9b039358e45bb3f256954b1c0e63c119cd294fc95b24cb4223eb75bd7890157445c298dda59bd736ca6305808471d862cc3660b76212bc38870619702f86c2f78f52d6a1ce619ae5826ef8ecc200e86a8050bd128b58355354b336545acafa5ff445e58b6aaf55a7803f87fe63f5b44ade3ea2abbea46a962ef030b6cc024aff703e1c49e329e627f2a18f6c1956a5bb9929f03e37ee5459c16df7e8ac855331f4c1714fc1e5e3e7e9d725422c3d23ecc351c81f8f3dd9a842a8177f8ae4735546cc762d879d6a996255a9bacbc9cb39bdcf8de26f02f58d7e05c2a1a564096154c273641f1af7c8403e8be1cb7bf3529e4e02ae32a0a85b5ca6266728117ad090243d8c016109d1efc670ea3cac1aca00a3e17b7497268e0c66679f075fe39b0fcdc1c7780ffed3a19f06be5cc27125bdd3a466aec267aec140d6b3ffd203ce0a06cf4c7c526418f40535bc46148494049c6664dcda2c879ff2d74146ee71cb34ec69b4a864251b60b80e2dd49a087df5b9867f64a309550e4f389deb9219a370dc24015bce419338371ae30a7396878bffffe5fecf537248c0bc044640ebbb2ac4ff95938474ed6811800dec8e31c7f8910a50c57dc530fffca0e6ca52230be99af2a4f82b81ae19d5f1ac7633aeed17ae1734878263817ecfa58fead31bd33840eed0c800201eadcc99e2bd17240557d24c36dfa5974a2ae424b31c2b5adc564c54af2d685ac5a08baceeea6f0f060ee3a8f38d2205fded1860ce8eb633d07baf04867cc7661e3f391dfc9ed6fca3dd1d924649de35a8f2bf36d5b5acf3bc62562543e6410f8be522a8130dbe9cfc8c4a934ca77603fb1a0f0b76aae536eb5241c3167ed4817961f63f7c47f41668b01c039392708a04bc3427be310e0ecc3e0a271a79c82d22b96e0e7b073d50c92e7409b4ce336b91fd03516b892d06c39302973cc36847dc72c4e00d049ecbbbddbb7ce525d50d5beb90d79f7fc07a486a6c9328ce596c750389fb2f69c06d9273af8511d79f5a1820162e20efb521dd6f3a3c8246e26dd60e3c26d3fca3f6b63b09ab1b2fcc988864c0d7d0350855b0c5c348cd35b42c26d4b15bf0471e3288bcbc4dafd162d9ba490a7590c2278326f859ed2b20627092b63448d59801fc9f8ba7bd2fc054a41b855b883aaba9933382fef238767675f463d3338cbb566214e5bc4931bc7cdfa545a5ece2da0ee1a6a5dec7bba3df57945e85b5d4fa482b386670f757a1f6e2752b10f22d4a1688c2840bac6dc00525a03a47d2edc7656e424e0abce791d87ce5b44ad82cb06a4c2ca81ad245181655f32e15ce6fdfaf1ae409d9e947bb50669669775c03bda581eb72fff4657211df8220de4a5b235bbf42d7ee1c6285671674f9587cb5b20b6538c4d2180c39011ab1e8aab537d794c09c69898397e869a7b901cbaa758cabeb8e8ae64a94588b713def7afcba7c1a643314b166f14d344fa4633648ff2631646cd0ba2697d1e4533e22b48f7291ece36131b342a1d0df08c041ff8ab750d670e477b3ae3621820db914f7a28d3bc74b35e55306e9652fbc25fefe55024ae276c9f2e4317b8e8c5cf66762c3a91b0040d3a6357f7315e75c95b50657c6f5d9e69af01edcf3dfee1e357eda7d5afe2cbdfa7135007ef397bad907de4c44924cad765fa41983b180a37c3c477d13735e620ee8f4eb039043732c4ee69f2ae229e32db8a9831d335949fdc28c9030d3de3364637ad02d3c691f3b8920bfeb48784984cf137a63c0dd9a23462ae1c4183a9c9fb3097ec940b13b585ebaf5fe86f31abb724088d045af99dd818b662feff4bff09bc92f25bff7f75b33784b433df7f18b04321d5836d6e57e97e5cb004e2539b7706a380c1451248b82becca85679494c5873aa3307f9076dcf73670f2d8cb651c99b6e9597b1603a96069a5c3c15085b2081376397f3a92df6c6fad58c1f25f79bda35abc29f1aa4da0b1414df4c2d003a50f510fb114aae58ba70905812f8dd9c716ebae0f13979cb7c793c16bc1ddca61bb832ab1dddf8045a781f68c38371dec8d0d4a9415f57a9f794f7ccd03c89b6de752e869c96fca28a7f045a9079bd8608b1bdce923813d2db543c9826f997d633a6615794128e5a577eeaac51c8ce5258344a50d99940140115ecac404a4cf9bc6ff66caf51db36314d47b874367e072133eab5826cd65cd6f3eb5f0bdd39309b0d85a4c1fe6bc788e87b2dec02896a9714972d9f6dedeed5deda7d39d8ac8f7912167dbb86f8a216a91f9e8ddc76f9b5da8089e9a57c438769762c38326b88eb638488041ec229af5769c4f783d3474e0bcb2a5ade8832e4b3bae8aac22309a0cbfaab21218d49317a7909f3e26a9a093c3bb324872f6c16f9ec2691176be2b56927921b89a39e8ba583d12ad9cedcdab6ee2233ea217cc4e127d13ce8d249b47710c3db73f1cf091786673a10b8f0db818449c41115af1c04d9b2f0afb6894f2ab02e1cd9103c525459cb86affce8dadb9cc17e70cfd87d2aac740607cafdb510d29215711ba54609f5e4d7f400ecdb340cbc022fceeba42e6899c8f364b41dec035530e45acaa12c332e79df05ea63ebe22e5d8198714d7a06b20acb335657c2500036433f2cd2edd852b0ca559db7b9a301d1491e16b63d6723b2fb7ab112f946b1085eb56ff1843ce535b102303c8fa7b6d5d1e0037df8c1f58e9279befa6dfb836a29dbd7166e1c8977899ce6686fc05d027f2d82dd4441f69d9452c9a13d4d9a79c1392720d5bddf04c8c20016a1053be07ea5368bf85ae94db93e63897271d605e388aa2299c942db12e9279d2c334af17a8d2a03a67e6c1c9ae5833699f3940ff3c7a7d14dfca0183311860406ba604d16da4a91da66aad762dd8ff04e48aceb483166d62e92801683acd61d7cdef415885fb0d57245dd0860a681077d8251ee81a2171785acf915eb5b4acf99570ea81e5438fff45c2dc12901fa3269874bcdaf19e24fa7f04f54a8eaea208bd545ba58ca420aacba2feb6b909ad417658752719d1ec93e12ede23698d7f55866ac7b31c32cbeaa250ebc67c1b2b82495deb18db75945f71a8ef71840bb56dc88d50917ae82adb5718da70afa9548d08a571b9b967ab2fda6ac8e2261feb2fabf3d7d8a12792b04e027bac974bf09476744818a0fe537342ecaa0a55665acc13d5f64c94da04d17f9887ab0da0ec83718a4a720acc0dc118032d86eb1d236621362e26658e0b8d49fbf2ad5527738f4532df00ec586960a05d9561b9a927b9c2db0a826a94656588d47434990d4d852103a717b5bcfe6fc502b1e56ea0112719a05b89eb84b1fb1706a198b2336d7675ca9cef1744f9fa2cfe72a6a87907fddcb4e8d7665866e28fb77420d675091732f6c90dbfa45d0a932f06cc3c64ecfa3f324196e3524d8338aa5f753f5f424e1abf203e4619cacaa048e0f38ed3333a40408deff27fee115bbd4fb2aa6f5740e4299e4d045989b198cf2e8fe99ce805e60f6dff1806edf5425fa4cde59416b8dbaaa74e7e76b1fb4327e608103ab904bb4bc5f091eb31bd7868f121408181797e042ec2aa31758b9e2ddd8a77d7cd1240cd613d315dcf2ede20c653797809d626ce10916b4e4f6b6f3494855a1f21df53cf09b12e114ece6e745e4593351174f450ced69ece62433ae6164668e9fd1ed5e4d5fe5173dfb7ddd4b3a31f07145e16c0a5e2a6a92be43d833f5bb300083d0c8e5724e1462a739c862ab98377ca5c831e53d88221131e6c0ed81091906c3f53ce65cb96a8c0eab8db0cacfa39958a8ea74993561bc25eabd0c2b2d70bca27b84f2e40c784bdea78e72236e33f911ec517ca39efaf5f2083553e42957a98cd225ac32bf986e4807883a136ecb216dbec0934b4737f9084a41c5d36fd39f068dd7c9419bd57ad6e7c9c5f91ffcb16fa8987d44992de1976ca27b908bf44374569838c42e8d5d07754df50bdda8c41b12436a8e744d39c5e727f552c6a27d98c0bf9941ac96cb0201539d4643f41b1d876dd22f37e269cced71227f008f447da3f68a22a4d0cb554b3b47444087f3e91e4370d214cd7c91901e29c6303523f76685b056e56e591d5fe8bef3d0970e1102ba07ff062673287f9701dee6f9ce91add1084d2ff5237e7da8f28cfab057b78341f404e0384a32e8448009df8b096fb47a149563af0f81885ba3b6b93eb61d271c6925921c99fe67576a8acdd76bb16614c8a87d2e81ce4c28c3faffe40d6cb5a22499ef14e5dc85f64abaec35bae15d6f726c046bbd3e5719f24600dda32169979f6019390a8126e2d9703a9347b160c84d414978ea7f91b604ace3fb1e78b212020ce94e22f57f68a197c28a87a464c1596692b4d9aff78571bf13faff5ae4cc68e86f74806ab989ae62702d1a9527dd212445982b361df0c3c19928ddcd25f81a10ecc7b53d2aef213a67074781356a2b73817c21d3bb975163516590bcfb109fda6f1c6c62e63c4a0670634bae708fd4e277cc0739ca79d683a71cb7b7f95343f3ba9a30a0640e8a786b6745c2beb2bc8f6ad2f3a9e96334845c0e4116d0d0ac5eb505025cd1dacacf140230c5905f664a75c211882b26dcc9a6f1924926e281101b0e83938c1b413d6e7679bcfe89a290b5e5e2f454a9b37c8a0e53e956f4049cafffaaa8043fe484cd0cac348aced6690e700c07958a1446b949c57e23582f6684dac57d85a8574121428850df65d6076c7fdcee578af331a6a6336b1063c777b9321944872ff48d6ef5f24ae80206e0272f1883dd8af74bed600c69f7b5adab003465b067deffd7e2c0838691f169ad2464269e071b26b80024b5275030296e8e0559c9fa98f0f84f477e9bb096434a8446a9d680a1069faaecd3b550f18a095ecd1fb5fd7b835b38f2915de9186f40c28760f0547b66cb68c08a3cbe7c9f9abf8b990853cfe9601ac33869cd9c5574f266670c5b19ce59279cf8883258edd99149dffab55dc664aeab5635ecde2dbed09b2408be4a0c7b27c73f41fceceab27d82badfc88744a8e245702cde566be26982778609a06b181da386f86e3bac576efd1bb8092c7ca621fbd09bddbbbce1861fe46eb48076095d2bb759549318703287485b360844d2aefa7907d31de84a82763005ad4fd8d5dd3fd8564739fabae6b69fa02009fd3112b6ba253b8a9c93c9a093128dce293f58c551fdb5b1a5b8bf946fde6a8dd2bc48093b91d2232c050e5ca5dcb069bae5c1f86336d5fc6c9562418612a32462649fd1d5439ee5e7904815c0abbac17f11439b0cd83cd8b2727b903833d83a70d2fd1cd1c6dfd457ccf9499211b7fbe62d5f7c8f76f09db16b8971f86e4a81a19df685ca0b510ff16b6973a546d3f581489c9faa2211d1434153d9251eb792b88f298f82c04d59521ce03962db6b2602b9dfa15b960c46d4c76991e98746999007a292da07c738f28af75b20a89ee63c7cdb42960f276b7c9480f52b79f9af7bf1a56c96caa4c45234728f238b29f3e2ef69f26c73bbee6ef55d5c82e24cf73a097c1242ba1251ec067f6c17b52b358b48c513cc8ca751a25b4016774e42868f745002b5e74a85d73900bf0b448f6da802658360e1f1469de623c0c6cf15ca3b167b08aa6c39e228a2b5cd414819f2cfb76829a9fccd4c68d596d78a102704e5e9ed0d4374df853518d76235d1db4c953e1aacd2133749156be6c2405b07d499571460f654e3d430821dfd6da4344a675914aa3df49812d03e1d67c385adf83c7bff3dd6eda7a142df9f8e216928217859e7f84fb72c7a2e376e8014e7c0ae88bccdaa55291c20bf64fcdae23df0f15be4593d0d39af371b4602aca11827b9fa58e410dc26e191302ad0fd13fb620e9a0b0ea779df6194baff75eee49c04fa5cfc5c1441a671c11dd9933961d1ca1e15d1cc81a5764c9b161c6a4ed508b472dcbdc53b2e6e75f91ead8a9d868459608d05588699dc90e5751e050fdde542d55099eb3dd37c9acbbded1dbf3fc7f5ea11fd36e6a5d525fad65bf3b154e7654855e968023f5cd0baebe7c57da586bda0f7efbd62f622b252353180a3c99d4d1e6dfc46a02c45cf01e29999ed4698f9be1287c7d4756b14c637e80716e3a25eb68dc3eaa116f9f2751c65b38cfe45ac61e8c3d52ce618c0c6c6ab7373846be899a9fc6edf7d70b72a30a59940026c40a9f3663b0865620f4b224cdd7b973f00bffd53c38d6754ac450ecca98d1ea3577db361f04185edf4db64df04896c9ae7167fc59038f4dd0b1cd28029173ebc5830e03561f3e5673cc4d8703c1d686175b90081d995a2140d5e7b9aae9bfeef512bd81845a11e4527d72da704716259cafbbe6857a33b23b2ae704e6827336259fd55e52b37661fc6c0330d0a773ebb3d689e309457d0ab1db4affe8214467e85c4a151dd80e5bd8b256ccd92d2e6a080cb6c790067b53bfcccc9263ae58953b4ec55b22bd0feaffa2c2b54cf575505c84d2e9781b9c4922c60bcb24f01f2da39a3f3a1273b7c904481503be7b660f4b6f62797c948641a045b472dd8867417be4c40b58c8b8fad105853063286b91a9d23f3d83967b0a5eaeedbaa948fe4604bc04a9fac55ce07cb7042d9e163042f141da143b3ddc8d8370363ac25075aed3fcfcb84ab0125cdd4b0581b157fd2250eb3c1283912419ed9c8d8c45e8fc0a2a9b88de5443702eb56ba1895599da3f4fc87c25e7d624de8244b8be6c05125f92cdc9d02fc39e8f47c160ed52d690579e652fc3435be77fc458a0c7e91308673471bda17ad790a9e76f7f71403bb743d13a127de7ce59338806865c67304993a7184b3fbaa71353874c0cedab8bd50331649b5d6018f4a008b168826660b88a4da9a3f92967ddadf7b63eafb1d9647495818ba8add2f0bd635ea455b55d6991858c7bc9be516b9c10de9528584d319b311f8a3450adfce0dd23e2377b1bda'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '70a2c67a5dcb9540c3dab5aa20fe9408',
33
+ content: '99b62e798f10ac720b2d6a8826b079ff42524d9ceb5c6e51430dfd64a18fd3dec14c5965649734b7a2f8c82cb422e5c9452d57e139d337a7d3e52ed49b160be859d0c6809b35613ea17c89ce162d5dc3c12ff632af0930bdc8f1324ee1339a18a8e02591f838b545ee0019cf91929836e9257fa94b7033e211b500cd67d931ecf45fadfee35ab7c6b9ba8bbb17227d45cbf9fad56cd2483aa2170148455956f4f21e8493e3df85fea31ea72f89c58dc15d574ab9d167651e4a54a1dc42b005e3dc59fac4edf29dcbbc48a83c4e94817c615c0191a448e2f8d0fe6d9870ebab5c821d024e32a3d058d2a98e308f65be57d176131c43b6a5e252a97860d4e8e55a0d713eda3f8f7ee8126ea96a4a643e740786864e855826cf11b1df0d4daee31c6b5fcb1de58a519e8b1079e27f2afd914518f0c6fc55617fa4b23934210baf85f51cbf0ad9d153d174a891ac7cd9e12d4aa5575b6f4323ba9d065f6d3cbe0534eef5de0aed2b773e6f5799d6c339e8e5279de767cc552862d2938ca6f72a4aec6017c9bb620d6f7bb62eef9f479f2c81eb3300eac2ff6559632bd8f59fe19504306f50ee4748d2d2333e984c9051ce72ad428c63da7f857c8630220d302bee4585a50c87d0c2f6ce43d1ff70fe0f20ae25bfbe0eb1a78afe20ec0bb1fefdeb902df9aeb706bd3ba3896b5b1e03e7fcd45470412320f715f4821da705fd91c66e497089fd62af04e61b8e1a0d04be4f1ec7806f64622c68005886c6e0ef259a43155c84b5cc48f881ae99f5c37d4cdb0b8084a14e04b60a91ec665fce361ab21b8b6a958f3cf9751e0ffb54493adb59c9ee2e716f4fab66e863d46ec08a350d87edb6fd0504f4741b10b6e3e54819cb66c0a4dc5115531c26dacf6903d99b32fa6e56ab0b4edfe55140ba77d1bc3fc5dcab94eccd10836343fca5c0ac7bffd98e636dc467952caaaccbc17758af9f2ef656a7a88be20f194ac1b13e1f6fd3d1e3945c1a54f575f8ff9534d2633bf7284ef51f765011280c30b40485764982921fd6b2620d953de8432540aec676f6216d8a2af532760a953055a25ffed7fb91822b909f2a3865f36d659883ed13e9375f34d1cc9926f3331c12693e6e51318748253f4aecba403fb60f80d4f2b2c1bf3eb3a88fbd8accd594f259340edc79bec422f188d33db723dba4291cd045ed6f4a109ce4969a8d82d4b4a5cf6fc9bb2e177a6fc77069bd1e574706da12200f0a6c7cf5ab7527879f02798bfaf0b9b135e52d57717792512af7efdf4ad5f3864f5fa0b54956b6af3755bd6b3b97d6f10a5cb729ef78ff692bdf626fed005836969ba0c833ff58b2756d70e718a6637a18b138a7530ed5fba4aeb5fc79cb1b600927f30da1dc356281d4dacc5fbe9e1377d129daca9d2a22c9621770e8cf76c5cafd9b6d64b6c76e7f12174f5d2809a440bc8c4049434c946745b35afc3a41bb21913cea2150aa6cb943955169b65f6676b05c4894c7a6df60f5f0bf62b69f86fdb76a0baccde8b3d8ceed58fbbd258e8069a90e5dfe40654349779071d9f8ba420e290ffceddc6bdd393813767c44f297e36d9d10dcc85ea49200867f34aaa0fcdf5f6b53b5a2fd73b39bea84640091df0bd2da90043241b9f502a8bc987884962637d6d20f83540bf05108fc5f7e4e8726a378f7fcb514cd0a6d2634b9133ce2eb49c2b8ab14abfe1cb147a8bb6e6a79ddd3dd424121c8263a4f4613afbd8c8cd2f7fbf7f9fb4737e1c98ec9dea9f72806c04de1299425a70ee44433d89e4e86494f6e4e4f130622f4b06a1e70a9eca1676e0666af816540f31c0839e31391f009635cead6fd86cc91d208d95812be82961ef5580d9d7643db7beda81e91fcdae2b5320efce2c13cca584ff0c6c06ddbd4255762daaa12782024c23dfa366ac86676af8e03f3a9665ebfac1cc82e37256d51a3ba91020bf1fb19f017ec22ab28a1f532927d9348df65c6f95fd54d7f5182a7097cb82c653fb418bbb30ff702fce124c33517d5de1dfccf470dec36523b41d4201e642088aa8c1e1d08c96f0c9cae436d6765f6a06d611d40226f6499d6f17f91edf1897882efcab190fa5057d1617149bb38ba05259fde2ea5ce615ea4b66bac1ece2e3d41c66cbd8a19ba4d38cda50acf519d97eecd29d1344b757e67ce172dbb488ef42aa7d729e21da800d39c96e19e5beaaaddc0b275b3bc67c5549e42980b3913b64e3b303b73045dedb50766ec7a3436cb238983ac544790d5f16996bfc75105c51f1f3cb9b7340308fa8be81feb462cc0ebd595c32098bc7196e72458af316bd0853f26bdc1cfb58cbc4f86a6395ecb9b2e6fb333fba02750b1dd71c84524628e15f55ac8d9a927b8583420b5c9f133c72cdd28bc65bf07e66dfacdcf3e2157d2aad75bc0c1aadc49b4de33470b818b26122a8e73813fbfd4ef8608fc229841d2ef2105048e3f576a7a4fe7e0d2c72506ac9597f54f7c6ffbaa5032ee4c99e31d2bc619d9fd1703957c6aa3cbce86897e11c792924d72423f679f760347693bf48e6691e779c903bf47fa59401ce0f11d10b6eaaf086968c70c3897e7daee0224927a67eb787830c80df97c3bee9a45ee8a6d1b28033823a6fe84ede289a780eff3e38025471ff97558b5f902b67acde7f31df2c0a4701d7123303050897df60c72fd895f6238d1ab7cd7bb001711804d889f993b9d8d5b1e8a600ad513fd334bc83d66827d31fbc63cba8a888bc10c155d54f92e6b50e111746fc752f1b6e8ae32f65626ed16e45aaff1c99c3306316ed70fbef2ef000946d807e9dcbd3893dda344ac7fc6f2675234045a5abf1dadadaf51348c85a60c16371aa15c7752f4d9eea3fc43e420e46b53f045835e1ca414301c0373365f1d5a666923e8ad13252a4aa0b7c9a991a417ebc1a7857196a20b751627705dd136d40e15135171c8e159ddcdd6252c535d67d1842844db222ad454d21122c6e1e3b38f1a617d9f910966150956b7207e071df367d812eac53ad29cbf500239f176fb10a636588e6685d5c7780d390e926a4ef9a05344ffd3b53eaea110498dc8278975e8e1a0cba418d31ac88d2d57b3586c9cc6e1edd429bf85eaa32f475bfe651ad3d05625e9b0d2ba24cfb4088b1fd791dbcaad2b0dae10c0aef8ab138420c95b521ca76a051033cb2ff65f3a0f5bd656ff2fa6164672379549b2af97201ed1ffe1bd9b945c3168db996f94bdd8fe9a5017fb7de0e0cdc2e1c78eaff5ab5cd036b66c637569b8dd4054046ac062527e8fa0fd6ad4e6eabc49c843770bdc81f8185e6717e17ce974724ceb70bef4014e8da3caf47a6310876e8992c2edcb3b58652cf5b79475f90634ca89cfde0d7705a504c229cc8939ef5de8b443853028dbc63d42cbe380f90f3104c4c9cfe6f4ef0c165688eca82aca88503ae04bcad66854a3834768728b8c4ce56a55ef88c340329d121fa5ccff92576d6d245d2b5b3524f7e20f1f95ba4656921d2590c8addbf6b04e15ec8ff04b6c88f101680e0084be2ab7cc50d4b8cc2152fcc7bcee674125334996ff2a4aeb5026d32f93ead5955f93186d05956399411f230f0abb9d8a5db9f43c4a7910595cb9eb17c7191b9bf2260f68290cae6e557b48636c74efb58e057744c7e216ee9efae45c9920a1dbecf299eba61226ce45abc237089698337cf729d04eb996de6f45ca390ada2dfb651daee8ac3791f4a05baaa10196dc9fe12bd15382c9a72026d93f4070df3921708748376ff18fecea34a83567f85d9927ef8cc29caa34cd5ea7217ee2ea702b6895fa799b3bd8c0a24ec6e0bfe660f8c1414f6b04647735aa1cee139babd92cfbe4f3f3e03c613a2c27f6a03eabb97dfcce3a68ce9b54f8d388b83cb4d860933ffc2377c86d4686f6e2480c7fed7d77bd351ab19a88957da5be95511327ef2424a94be10ae211e635bae411a7fa03fd265db6d34d20d8a2686da8c6618a9e2b6bf6a120711bbb9e92e0c5270c75a7d5457188b032878d5d088abd5270c575b829c8b8667a11894675d72d6c4030b03185bdb1e25fa8dd97a209e0367c3ae482d5cd84c0d2f0f5091d3469cbc78fdff5be96f613a0ef9143db79911f748bd94ba0d7458bef1d642037a3cc1271a90c900ba66a80fd3d3fdb0badaf02f96fb797cc9320bf6ce7bafc315fb7afb72e15dd428eedf4df4c137e449c0dafc3b1304112550cb55f6bcd291334ee31237a8392bc603c4b09d277a8587cd25e8ad894b010fcef6946c41dcf724b18494d195ad9e5d706d389211499026b6a96ff8c23555d68db2d3177e9048e25f362cf3999c735ed202d04ab54c7eb3992163f223a3c64b42b09e1cf00972fe501077852c4a8fa5dfe4fb996ee7b3b9b123f3dd837de1ccbf3938669423111b4ceaa704581b4da949dda40f6d5ad56244c13a7311d840ba289bbc89f803a24b7686e38c50d34e2a05cbbb284ce5ec5be557a79156ac12867b49359ae48850fba7164d435d41888298e14d3786d2e14a3fdef5ae9b6ca74cf87d06e56717bc09655c7cc4dca612718637e9255b03ea53d7c5e797d3e641f4017b0c8bbe1f01aa3b7518f69f6411806427d88a907b11d8eeeb6a9c73b0b24fe8c74a0d72073460626069059a890231077f9d51f38eab323272bb704f0fbfc115801dfd55b746f0cc9abf78460c4b6efeb44f2ecef17fddb16b48ba5b3aa3d7b124a54786be67c5ed1dd7a6e9427b847cecbbf076a60b2d3acf17779edbcde0aed0198c8d5a635bc744d3329cd267ad7f9b8209ed9256402f760eb6324952012fdce931c7427d893029678159f4ee7f23a55f21ff20e3440a1bd1b4e75077918683681d2b962dbbfa06b835240317e9426b578ef70310a91438615ee461ba61c50d9258f3125de769e982b80c177104eb68a416adcfa1b1472ded2032e5d873fe6218e46dbb3c6eccdc0996a8f0c7d25df97583e1105a8034ceab9ea5c830b890549f331f2b653117347879ef07a01ac28ebdcd9d9aa5c45d00717482b26543a59138154a502b049ab010ab08411e2ca07b785d2527175c3a367f52ad01934abc3e4965bda3ef1da25e68df8bc30e8de8675117a69bf0a9ec400244037d455d839ce4b53c2d666fb7623bd2ba241e783e94a3285a698039b0e009e5943295d0be9e9be252f3203931a6bd2ee6cbded3c3d991ac50ba812d3139f40ad40e2ca88fd8cc2fd278c13392cfcbe90826f9fd12305cdfa47b4b9b02410a3b06bed7c011fb909d2822cb6599e0300204f0bf75cf3cabf0d220cf1f739fb270d84fe7edfd0737a5fa745c8f54f87c61690566ebffb66e3f18f0e88cc2672bb59a8b5ddf177539b94cc1af019ce5edfb4b7f623454da7c2f885ae6098ca37710c37928f6a104d7183e74b50dec00fa8d2aef8e042d6e42e5b959cd3c09ca2de3c6095004f2fcc8250df5d506431ff0b8ec459d07da134238b180b87a33ae17fcc934e141de4ec8be721540dc15492521bde1535a9039303cb2dd63e9574e3881179093a9e5b0395f392e8093a917cfbe7b1dbecdb81d39ad7b47584359e56c37a229fd6217b35a3abca21a6fa15a53dbca4f8b2781a2160c8ac33674dd11be62f2448c1864ac93d7a4e64818f9767994260b5bb25812a2763bf2d4140c83ecd095a0c6376757532a8c7ce79d78724b44c1795235882a9d975dcb139fc7f2e6e00f3a13b14bef35eab3e2354a980f25b15df7965deb8e27f07595097d62c52e5a7003297011b1cf00e2ab2c657fd5b25485c4e431f3939d82b8742cc9082379ef76d4bdfbfd078fef822010d3c310ceef41c79b6d9c6b8b8514c1e9b7fa27362f74629084bb171952a17f5d9cd4d11994a9955263d3061cae2153c206a08d8d71dc1bf0af2f03b36855cc3bec621be75d1096cb3cf16ff50bd4485badce6ae63d30f2baca5921558b4887817646e78c763c8b71f62341b0e439b1c7ee2497395fe872e63c4b9f32c1f02480d8d95a6f37f75e9c0c120343d358993b65114c525ec87541f0ebccf90e24a4f8ad7321fe63cc9ec8f9f9f8151842140f0f3d9a57c70f7876974a87ea42a9e30f081dc91088c8b1b4b948b107a369baa09647c7dc5865b7a4c3d8a1490056e3411160efa7f8d6e6beccae6d3b2c33750f547b90b29839d201ea32b4438432a382a56b62070e185de10152c03790638cc9b41244464ef4139bd77c425bbcc7bf5e0f8215932b619c0e403a0f3f44f7fbc43adfcd1108da2c10f09fb5e0f493c62103bf7d53d469346110d2cab0de273668644a582a15192a50042ca78b116590aa55787e2db57114cb572a1d51b88a782bfb762cd86fdcaac14246c438d52dc39caa9c9e4f8ed7f4fe3b9b8a108fb182c34a7b14ca80772da9a16450784a7b492ca31a2a9e0e11d1d23d02e4beddcfeb9c074abbcdb11aaaa798b71d83ae8d364bee688dbad5ca1c56bea8d53723cb6a38a52a697780404f14e79f6aca2b9147e88005baf166137886f2d0dc641f3488d87106864f151891b05d19158eff26a301883dae26c40a36414f64f116cef28466f0e1252610156801d75aca41c9752d47afe3c0a22c85ef313b79040fcb36ad3908a533e5ecaaa98f99eaa223557457fbe74fe62141a7edf7e0021c91883198d665432aa2b95f6c401403fe7d8fdbf5cc3ed58460984be5638116e86554828bb739b5de676cce017f3f62813ec6951fc463dcdc45bf810f48fabf43c2be686fc9c8a3d35974f915669994c907a8eeaac61e6bee18335ae548102c64d14e084a18fb520c70bc9f268449a8c759853805fb9035de298c1879e1911e12e0f571173aa0cb77cb09b8ce88a7e633f9b134d3338e808be6dad753ae075ead9822863b3ac36bf08fa14799d96673a0e526bb06de1888b2cc02311c6e4fe22c0ea6bfdbd2b7d6c0e25595f704c131ed60eebca80d59970b1340bf0b6fea37ffd22f02b76647b8e4468a8ce88f5ece818b21d3b6ec43a0aeed1e8dbfb345ee147b9c27aa0f72c7162a84362148be36964332dea9d98cea788c3fb204e23e32ff3cf8079020939507e7226f04960eb278c5d9470a09ceb2b325e24e87086f0d42bdd16f341c3b0c784492db44b47a75b0e34db946865bfede685cce40365dc01e95cab550cab214174315d474b1ae4ab416c67e611cac94d55a7bca8880870ce5ff5e3d88959b02e806110d9a93bed2d923b9256d25958d11d4a599ef6a2eb6f97c11974c6ca39aee5b4380ec058d3c200800dd07ce897e4d3675a20e4fa9fa2ea5a086b88588905f54ca36f36fd346b3ab069e1a9e3432c50ac1c64efabb0860e8d0b215fc16edbe0d4edfaa594b7fbe3a392aa81435c1774e3e0addc9eea8cc697cf41398e8f57a33c0edadbd3f25f7d72fcf85755c47996ef9e0ae66eea90fc0d93b040392e66d9a40a6def1b03fdb2f4e689c579052984474ee4273eee8a0a1f951ed741213cefedfefcd5c383737671651410c7ab0e00e56a878347d0cc2e2b2bf1d5df41d156dd01fe0f12c9114258bd199b40fcdb2eadafe3abfbd2495ea922863b69114a337235fe0a5cb5c59b35c8c29d3871c32597de1ec8f1c222b282e54bd72d6797517094db5c1c7cee6a205fb0dd42c9c045e43faaa721c0f954b8c50952bc7851fd62cfcef53b5141985a9889aa4965af85ed02a6ad2e8283d0d76396ed468a0b7c005cec32e7a094db706a990d2ef86cb0bfb7a424b48bbadf7a5978f3065cfc0a6ecbfabe6190d726469ff557edf28307c17c1e47a1ffe93f6008d12b75700d17de3fe3e294f890724d87775fd5f4dc7b9f32240636960f17f2c9e8f48051e6283578634a9fc0dc5dffe516b91bb045b5c21ccef0e684a04dddf35584fb87337c98836af283f6ed9ede6d8cd0acb067eec6c349a74bd679f04a14c3cb8021f5d5b0076777b65b74824b260e9548aeef439a6d9a111f19205e62b94b53209b556c7a4784264571faa7ee3ec94dcb5a773e6d591ba843b51b9e9e5a3f13a1e6597b503c7a3f85a6bbec5f644a8a88bee356ad1ec615b45a575fadd711ae1a9de91d8d1c069eb292df1e1b5079efb03513a9116b91c257bb25323d068c6b57f762777d7201f7c7f1e728508f8cb77fb8f22eb47e26efbab61dd15f4bce3ade68acc58ab733b042227d65fd80da25d56e1a5c8a3170f9bc18011d70dfd57dd95129aa747b0663e8fc7743bfccf8eafdbc06b793cc6e69ce6065fe75e8962706c3ba948988967eb2def64ee9a2d62f7051453c33f0b60f3ba5a691d7f55e7ad087f0cedff21c480497ae7badf50b66d2cd26331b9fbb1b95f6b1d6ed185f93b064bcb99005c92f985fa55bece829f01ffd9fa25db920131c3aec418b6c7965048742edd8713d3945737ddc1c909c8ca443a7908be8711cc5e4b322d89c591971dc5e0c394ea2d6dc0cca3e89cdae84206b1258c40239c7746d80ec994f997215f0eb4bd9a38e8d27798ff7812a72753242449028a283e30f8b270d1ca13d4bcad972f762b08a92f3e14446a5bf4354317b2f1e9f86230e463ceef1e7fa0b322e1af8543047016872088c2de9f366c0465b14438f08712e558f2900fc2f6a33bfd5d3e2a69561b3baef8f65c93bd704528f89c1d6252e70c4bc5f7cd37fb6370ce0226a6af13ca6237e2e827bf6553a9b9c80a17950a0af5e0ac44faeff4874fe614f8d91cce60007d8e33f51629655aa22b956f51a8d07223321ec2505f3b1a9a8b82f9da93b9f36a55ed81725a256421ad4f18701684911749bcc8d718e74dcbbc4973a1c7c26ef2ef5cc06f558dc74380f8eef20af9911df8ef075d4526c429ce58ee88107f89a8c2cc9513760dea17ac294f78f290cf46551f63d103489c575614748d8bb230aa36c67f936b4710ed6ab26f82240f180159617b667bb16712761b4ce786fafa15d66514421a137e60fe534c56f42856554c156d24a4d9e6bbda5570f0763402d9d2a56e2f3fe33efe15c1bdc1cf93844be1451ade3c67ba5705c7f97bd6fb718f22c42a121cc09f8218424e53cd66bc35e11ff7690da49e0a0f236dc962e395c1a6f223135f53d8e2ada44d75efa1313885073f9ed674d7c2e93ce58c77cac8ec5af6226ff5be55956ed8fc4f69d98f8d7e72035e48bfb9cdadcafbaa7c56e055207e06805811c20cc40c0a22d9aad9f058a92bff73d773747995140b54c1df3bfac92ab1bc4c51511c193c38821664aa4aa3668c4aa61f5a535d13b392756d2bc33e469d638f9dc898f7076ad4e49c5fbbf6ecc1c00d36b4ff24e06b72b29fe33f37f4618aabeed557a4b7c803e4e79ab9f168d11be5c906968ade71248e0421e062865b43a1ccc948e1cca8891b097931b29baac33257656ec732299937fb7008206f569751fc4aeb4c7a03a1f8ccefdb4d68745305a8abbea3ca8a8c5aeb59b29f6005db539bb4e6375931403f2e8bbc2d1678239394a2dd156c3f6457bd19b8d20e2a157c1745d11c6bb9553d6c0bb4e93c2440b0ec34a5220b586328363446b7e66c341f5b631e9c34c43c0cf8e790ad093997c1edd35b9b1dc4fdc72b21077f6ed26afa815b881222adb8125479aac30b8a203eb2d0d494ac0dbcace9e88a80cbb7b9de2d1cac6cf20118ec3b801731f2cb13acb37de30cf35b2ca3647245306b17aea6202ff7021d8ca1f0436eca812e0470f2b36c3d6a446f06235841fdaa58a3030fe9e1a41292740563a9a25d58e5d4c206c4be253725fc0fc378489d47b0b1ec32b2d3e84544b356aefafc8f5d659d91c74a907d7d55a523bfa2eff83011eca1f9038564d5026040482d03d671568d673e58484ad82b0eb3ddefd7c1201556ff67cad5da7d0050829c8c9d91f0977244a53513f220d9b6aa55cca61c9b14b2c686e1d8c374b8a39c80cf94e4638b272d849a8cd3eee362215932a3778fbb97bc83590c27b5e2359a3859284b57887eddb0ac9e2853c8bc77761d0800c278d3a2461254dfa6042ce216c9ce0db17ce44896b48d5e8c4e9794127a12484925e6eaa558f72e821dfc744db011b6fc0c850f28e297df04ccea29dba80e396a65dcba3b976b9114cf8c57125f2ee30c453813a741d468a53ef034225d63523fd65f8caaee351645a0f96c11d7be8c600328c022b5f6b120b7cd3b70a36fcefac4013bf1b0418975ea9d6405a243b577c7786557dffffce32190fe0455cd68b2117ccebf7040674486b0f0ba8f601150cb99f731134571b76d576780e956555d2d573b7e4983923f9fd4ec3b56ff01c53973c3136e472760860f5b676e2cb5743a40f825dd1e604bcd8d22228e9f6aff04338b139d6e8a9063faf62f4bad54044b0205dc4c27ad6b1504136192ec470e2fdd70dbdd9ee9edd64c72beaf87dbf055bd6481dc643e0e500351fb91090cfd41d57aa1b5979ea1c074a4dd7bca48cbb6f59d641f8eca71b320061d6106c5bf1d170602d4fb1efed0b312ea8e65981428d2b51011a131c95326adaa48bfdd501470423ba8101260dcebfd231f5947bb23815ea5ae29e2fbcd2744387df753a63110fada67fb2a032e7555422a41f00f3dd2c8b969e85ed638817e7559a3e9fc86f03b96495c4263778a4d3032a1957f34dcf422103de37924b3d9fc0b785929f6417f229f9f163a0105ce55efe0448a969847d2e9027670ee150fd3ae91857dd8b5b1ff63de438165e5fd1f6b23c51bd4a270c9b59cbba151573ba7ec813d51b0f4e21660855b7c849b7b2deeff6bb981606528fd0b9cadcae838f0057a88d5bd730f7411a979a7b6398c99acb14d465488d14d90323b2ab235469652f6b815b11b1f74b0c62ae69aa4fa9f52b21cb6d383110347c24a7ccf76454f8801eb66f1dc537dcfdd209cbf314175634c58fc969f6e80e2bb6108489d32369f4e8386619badbda8b1571552c30affcc3fb786a4e19406d7c946bbdb7a6d29fd023bff947e093d913a112c989ebe39cbd0d4b5e896ab93364445304f51a0cad954924d46c68ed5786fea5cd7f707e1e97968dda828cab446d94ca2b6ea2b4be96f2663066a4e40498f2354a05742ab3eb21d7ffd4b8f588ee7c403a20848234eb8beb38204c1c69263791db20ea6dc7ab7e9d0510399b2f51560fe235e192cd615f9f6b0dceb733e85cae0679ea4454b388e5a395d901af5665a2cdf489c3e1715248f5492873108348a593be9624831c84df25336c799dd989ebdca3fc1ea64fd1aff123613dd28fec614ac8bfc47fc8426597fe0517ddbbf9ea607ca924371511dc8619eee879c8e32a3015391f221d4c1f60dc2262a9b646f555d319d8519e6d9d8bed591df03f93d7a9313fdac2a406f87eb44d3e283868b1b53dc9ff5e2b0312203ddece44f4bca6e701e4adc6d970ff5e1fc9eed62373a83f93d69f14349796a108da996a178ef74c339721fc31df90046043b0800169f6d0aedd76acc769317479a3ef71cb305a903e6bf49e53c3e2d256f10c26ce73daeb5955ec3a26b3f64ea07fb76696f7ecb3dad667be1ca0e5b7a787a737183218941b0d9c9fb70d80a4da105f0d12d3d0d567c84762d97502f74ff1cd6bed6432db7ae905f7bf581184c49f81c0c8235c0bfb42c6956cd338c40f9d1414f21bfa05eba0353efcfee7bd1552476459436e69a5b8a045187f33068da87ad299595b3762b16d01712729774555fb2442fc7cffc7a271f63ef333b09b51c40e2f947426fb05f6eec0baa77179e1c1b32a34c42f289ebe135a3acb295d613436f95f2d0d501879a98f6c89d654c700b5775ef72cfefb8e225cda7e03f14e6686cf1ebc26f554a7a1a0d56532e49da4096242d657181f7e55845127f4003d145aaa678f193ef6e1a0e5767123dfa36eb2d8f2feb04134cd8f611d429bdc84e123efc53638120310979d05bd141d79567ac69d01706a0fd818327df131f676040956b3e986c5dd781780c2735828b0004ffcf1141ae39e90cbcee70f51c2a7798c9c47b35bc09b78417a02197e9262665b6691d31f03f80c3f9864c9d3f99cebf92f33b002ddf6a5a8337dd4ea6492a5ec857403dc3402be2ca880a305a8a742ab4dc722aa07ae2ad5b34fd2c00c1beed7f8e1bbb18c80a7e4053431c068f978e969ea80b1ebf0724da63dedb0d6558c6711cec712820474f807402d60802c96efb90762697ba6c7395d7c64e8fd41877a1f84fcda862fa2f4b069557ebfe907303b6781bd853cec7f3f7ad442fb0e24f13db664fe03004dc39edc25adf5ab8c6e7db4cedcb0ac47853aea59b7ed73ff1f8cc317a3a8b2a92ecde3bcfb5cbdd7a03ba9f24b7b8fef2933483652f18768ae9badeb720fc8e019a9ca898367e8dd32013e51b8c2036c0d09d49ea6a699e6a231a7a4f9b09850b6a3c11e243639c52c1c5ef9c525d662d758dc6798644fd3bcda52a1260546b5c4d988812ccbd6b4e49cdefce34814365d7670afbd7834ebd331caee8edc66bb746e1ef8a9a2e6bfe107183132952669cbf1a41d3c372e97ecea04a9edd4c2e1cc36d953ca6b1653f57b8f49a04663e5180446d8c9c1836c65f6c580a68ba6ef5d6bc66caebfe3422107e612fcd7be93ef8887c8fd93e5fa14f45c668f2754f72edc1f6f6628720150929ee7db0786be99b2bc672cd61f759bb3f05f9ea517ad1fabbd9a57cec2937f79c0eaff67bc9c427c8b851adb3e653c950187bc7cfc3cde365763390e9bfa63754e5c5127140596b815e3fa560ebe71402d8594f460b5906083e6b54d805f7866d433cdc98c22ec45221de35024314013f6093bdd0ceef12c4ff935b9fd5b3fc67bf09da6ee80beb3e88f919876bee319fb48e62a17b7addfdc497b2b7912dcb3cc728587938e143585351d4843ec635a464a8c24436d2ae001068448f31834f160912a3f79b561860f03977a1632aaed8835dd0b4104100441d0bfbaa6ed39bb7e0c9b095aff994cce79e67676d3d4471f0b40972851266a1884c9423723709c7456fa63a29199cb6970e3cb5b353e4cbf4e8e61114265d493bfc6db642ab09a93bfabd85b3d920ce45235dec7025482db28b3fc42c010d52163aeda6e62dcf4cef9370a29fc7b0e93356f55ff7dd68a675eb12bfaf1e0be4e15549a43be6d65dbb44f53d1ab55350f8e487025c39dfbb97896705723eb4fc15b25c0011aec3a1659c0dc713d9d1b34d3100616edbf317da466b7a81efc93ebe61af95fa787998392d0db78d222c7487dd062b9471d6ad85e3a28d4f375bcc5bad6e151917b9f1fee3e952112cd7c9b48964dfd1f25abf07375a9979fcf7d143206a143937cfdb60aaaf232b077b76a4b4d2713defca129ab2f9e758389f33bd8f32f49c3e2f8085aab8a2b8741985ed6cc4ad9efd02b69eb6ef3f13de37c48f4f9a6a7228fe1ce922f06a37506fb5e3169db6ab00f2a41da2b4f849da8fbb8b441ddbe6aabf0e36bad0cb07943b53f7cb42f2272ebbb615e7f06fe5dced16657f6e87d81e162eaf054fa14ce12047da88a96503e415bcefb98ceeb58190836d787a3e47db99e3fd50b046342bc16e6e7e337f9b501fc56b44837f3f4510c7f5a187d25a4d86e1998bf2d5b8c48d333e3d1b6e9b7d15c99e0d4e5cb721d24e52309ae65b4b5312cab49f6300c05341ef65e1ef390143ac75b6065384676dd60afb3be0bd0ac46fb8208c04da7210c44511a72d2f65525901982d1eeb458112c99633b5712e3603c518c4f40af14e18caa3920b93a7f1bb77c142e84a7230615b1d9ba51719953d6ce33a29145eb7c841d7d626c799deb4919ecf6b0c8cf7d4a53b0feed24c73f8f9a549601239a6d1f5a69d7e67eb33e00da785542a5301e069e2a4fc329dd221182808edc8eae62cd9ed01d8ece7abda4f1d442c8f62272bfe46a32b6aa7326fbcb61e9639cebd4dbcbdb6821066a23cd659e8b6f7510598c6710651a25135bd897cfd74068006993f4cfecb339d255b2707a70a52fba36f210fae196acbe854986d01f903211e088fb8108fc17f572ed2866b7365a22a75d159dea92abbbb534ae35a51e5b23277cc5e4a5f7d3bf4dada7f23935e247e109823d1856ede1dff73fc923bf8a819e054711bb0e9dc5761e9406b07d3f33e6c723a107ed46fa97b66cbc5bd039899399169a27d10c484e7701c2fa877134513fb52e5b6ddc836c69b95cf68473414875d92658678b09b26f78a758f07ff6689e071429aaa73d5d952a577695a8119814e3a838e54ea6fbb83689eae295c57e6efef00a644a5a1fde1700b5746237240524ac8439630b8e3aabd7bd0decea606c62f6d8539fd7fd4f7dfdb59c6edcbde1eb4b7d6e513a9f1e9bc0553bc72d9637f8fb6c9b959701f82d2c5a471323b0219bf59c999c1cffd95c376ce072fed7b40c61d104762fe2c1980f7444b9311919577ff62b1acf212f036a86dc543b0365006c75de3c3ccfbd98397b8b4234dc8ae978bbca5a4ea616dd06204f83354e482677b734e4ee86be769967c34c8d4340c86800db934caeaea4019e742d60fcdc8564771a4760d010209f0e99fe7b1882ff0fdce28f5289b369d74dac38f974883fd823daa8debf7a3172d65d02530c52a23bb4d4dce52f7c16708f899cc4c71ccc17156d8ebb5d99140302d9983ed96cd2c028a16d70003332b16f5b9a7a3ce4b3334eddc336fb046915ed9d1a71628f5341525a0ceade53cfd7f7b78dda67a9319950c1bb67bddc0bc118cb0796dc76ee083e982b612b5d6d99a2ad5b47a7087bf04e1e6a7065d2665c137537af7ec87552d0b92713416da421e2e6bf868fba98bd1c873205a5a401ac0fa7d0b279677250f0737a8d51bf20c7af412ec428d79ddc4ae7d8124cd3019ea9003b93ef755fd592632bb6945a9d26041c84cd4347a105abfc3b4f6529847501059717d07e389a7d96e8a1b4f65cf90352f5bed078ae489acc542a3790d5c2262667bd1d5f0ed4939bbf25413497aa40befd1d45b84ca4bffb3c123bfa012edd4d0f3ea3536018cf8f70f9e6ceec839258b26b7cf555671ad139b5e685c34a97b153cf1a0fe1f5dad4946540f1ba8505450363c0ecc91f2de7ca8e28efdd714f1a3957187c7e3879290dde061b3f90b4b58f376becfbd26d580a6f1ecc801f5ddf293ccec9d1ff073a2a5f570a5d11c6f8f70d73e9c67a8fa5abb413d178356125ea677ad1cbf37f7b6193a82320d691972c430978ca9ec4efa2a6b46a71ffb10f945857cd6e894f6770bfb6d63cf22b9dd488b0766766c2bffed0057b29c8d5cfb92bda45df3cd388b367f19d6ae2ebef013a90a1b915d6d879d449e0dba1f04ce40582510bac24b736bab5bc7a87e17adfa7e74d04fa7f44c7a96a245d583ca9f781c265ab35c0697cd649d5ecf2bc0fb9d6da1690b99a02684f0cd23b69a5bbcf0586818d573c87091a60f5eb571468e8da2672bb94e96b8e3532fa642f22d14d55c0dbc8d64f44924410a26460b4b5b91f849ddaa4816e2f7607548a22e1a954e9ab72071218a83878309958099d728884433238bf89133e658f3b68d40aac97d2c56ae1a31a26c9d38ec16313061e611d71b103f0d7dbf616f9fb470915244586ced37d4b2e03d98dcc91dc544b1f63ad7e4114de62a799cfc3fc6f28f71fa81c0272e2af3a76930abe5d9a5898ac7b10d7d073673fc28398eb9761f5eb7ba282400a4e3d3c012483c752e222a408adda0c13e32051b04f3ec0c9b9ae7fb22f5a3d50fceee6a842b330cb9bcfbf7810fe5951ae19f8724200140fff5049accc0fbbccdfc741619a61dc47e9eda0670d39a0724c5e1bd029f3e83df47d017f002740324102901385a0e9d42fcc0bb7a1bb44b9166a058ddccbf100c704f5dd16eceb7cba605f276433481f38a81ccbf803d3e22e3ff5195dd62a0be1c6f4ee649226f3227bc809f207ab7e86c914afc5d9e4622ed96743280de86ce16322898d6df4e0521bdc8a957fdf01a598471598fa6016693720428ca22ad2b4b0bb3d09e4cbd0ab2bd50991d48991b0ac14a33e4fdf9b8fdc0d1f20bd4b77394788a85528a5a8f344abad0f7023b2f6087b13f8a1474448882965f4c8a4e733d86d34de8f447d0b41276ce953ed38b8fbd6c08fa8173cbfdf524ef5953f1c016dbd1d5ac95eb054aa2d1edb63f74744bd911a4d7441b53b8aafecf4eb2082e7de375fbeddc2e85ff69da3262aeb8c9e1fdbf0167661ff2807e9e3b5ffe4d257b85b7e4641548225ce60d9907b6aab77858032bbd7399ff03a43638400ccc28f1c50e3f99c75102d94a8a9a2ea40d2329458269c77bed51cda9a64060ac35127b76d8dfec7fe7fa93c52c00bf99dabc44daa5613ccda63e32536edff7400887b307c667bc54a1d9d25200caab857aa9a8b44824f1677a25cb85d24c7e291bb263dc6418f9d9801da7ab58ab304b8ff4bb9ee298d3756ca35caca28d36fc955d8500a81d327ef91f62b630f31e475a31fc3581c3857ae23c7d8d93f9e038bab23fd42c54c6fe87706d188be7e83934075e984756fc2fedf311aa776ad2c409dfd64075558f03d9198a2beeb6a164e4d0b70bbecf0e68dc05e32110ea65caaa007ecc8d6585e470adfb80171f13d93a88447d7f8e713836c29894dcf993471bf5c6945d5b0a5b0aa21198b37498631bde512057c8a6cce3a8cf4e64fcc34e9f94ad1dd7c05f866d52cd1dc6cbd36a8b058bce9d9847a24db464211648e89313c99ea5540b75fd3aa97b911d8edca33564f3980e94069acb7dfe3022c6283b60c24b18fed682b6cd72634e9f31ee932185e742838782d682c560c5f43be8b35853284cc689ce1733f6887fbc08cc91a55db50e5349466f3222ca497bb11d926eb26351a5c76ef4f0579f485d5819e56dd4ca528d239bbbf81cbd4629a320fa72292881817004d4a0d9ed2ac2e1667bea614cf3ab21ed55e2c777f1b40f13c6bbf0bf4be090e1b03b662951d23dbbfd581988e4d1e9c7ff832c6a37adeee7475fe79989b4bc60237537699f9369c40339cdba58c4c8e846ab680c442fc55f9a8e9cf376b94b53791925c87d69bd2a8361c966af0df0cd2dda1aeeb5fb1e4a9fde9600dd9c2f34883476ba7ee2c877e9819844c5bb53217806b69a2ce6d573a08f01accfe751c0d573315f3ba19445f44e069c85cce2aca062754ff38919b40e676f9b9c6abdaa5c22242fa4ed8d29e7c02fc682b3c91c07058f1edf3ea1402fabb3c750f4355acf6ffe4a95d5b211016ee71c1d3b1282b30f25c8b8a31fb41dd99f3cfaa16170d1687852cf68ca4f7a5ecc47ec2cc5211f9c2f78fa1c2a7cad55d8d739dd970b1c1c4a54913634927ec19fee5b17f355c38423aacc59b9607509e1e4aae3c46537e89158d7bac03b087a4c3b265fb76080bd631c41fecdf172bada3eb306e4465d81f9a74883fc77989535a7f457084b21d49f4ece068db41310d6e4687c513a990cd9bd214ffbc9b3e91f99212fe2e920985c547377b2bf865a6ab123a132638b2186ac8c29264a1d74f37c6c7812c31d178338546136e89ffc765b99c59ff315d8ccdc8c0c8e48393cb22210ec1e42066adedcf08bb30efca294905016bf69349cb349181d0f246ead737449cac90d04b090b52868e8d2a39a72878b3dec8f8d7d30b2d46a9c391f83cfd19d4fb8fd260bf1825300b656b2bb517809d77d6cbb8b729a48c2be95bff8d023454b869951cec75b2d91993f28cfff9511df174de849416eb6fee1ebe88599233fc043bbe4212434eaab5ca6792509a957563ade6d3566cb0239c8d8a131ccf4e97365d40806946fbfb547aff7dcf70f609ee66d1c92acff7060b7ff8662229810858ebca90592746a04975704c6a4f1de8f9832c0c936aeb8c17b98a8ae27e5405a99ad76fb1a2a4b286b068eca5499ae026922f86a1a3c98279448d296df58e089342657acc44d4005d902f8b0948a579815ff3e34ad8875e25130db7483ee7c91d6d5d0cdea9120d2e9f74d3b0a46a88b9af3107eaa195189e441a3e7458ae00b54ad2639b5dfbd2f09e0fa645fdf40a9ba7d6944d7ce93223918926d407d380e9f7ed5fbfbba4d4ad28efdd3ee044e2b12de90b0a8b1e38fbd314003fb3e303029130c75ffb6c893d9e3833cb7405bf37b70804969447a2a2a92d91c1ce82a9150d8a8e7f2c18009b42be2aa124fbafd084ec3f98d1e7635054e564f1eedbe6f547d82c0d1adda3559d297f02e5598ebdbca9cf89270971c04d6bd29bc4f334c63aafcb95bb09f16869341afee26307cdedeab7f032975b516e86f52cd07a80eca22ee21fa481d63300d055a0b7af4b0ac062d7c06231eb124fe1665f90858892fc0b414753d5a704a5103a398b24560ace20e3c12ae1bfbbb459defd3aa537bf6455adcfc32156a489c9fc414efa70dd2b1518e827f63db37bbf32bbfa658136006f358d0cb287979a23d5fc401da94ee903b59970e90cdf693d1b290ae92be23a4bca5a1d9bffc4aab821db50bb20e0781c16fafb4ea8ef5e5345b0954f67adcfe9155ed90992506360b162de66f0153f94b9008489f9288fd53b1a4b0648f300c5c30e86cb729557229647acb57af0588cd879aab6474606920b14e4841c2a9b8eb581f9399597abcac144c3b9d9244c3d9f31f90f4c7352a834d4d3afd7af5bfb1782afb1ac6c530958faf605cfbbcf273ee9d106823d29a3446f748f96a14c494e05045507aaae361e1285dd19ffe586f0f12e0fe1daafe2a13c9a066f2cf1e857e4e62dd9770bec5749842287881edb142bfb073a97eadde6b452fa60a27758407aec57bb4f2bc586ca54189d449f273e297652c2a414fd8271c86e2c29597d4bf27d88ca6e9a008ba1e3f6c9bc6044a1d2b11229a11374ae582e3c76a94862e046408c01388dab33585b2e16d51c32cfb3b8df84a6d5180abf3e5cdd10b1d3fef98f8632d3a2c5ed364a738dbe835e7bd146a66b0bd6080d0db85ec6cb286483a21e9da88852155f411f324c247bf7c6baa0c58a53ed5287cff2bc37c17b07c69f35a00cd9665234266b9df5cb6fecc514ff09f5b5f5ccf863242b813c825b0fe30590f6e35578690f14a70ac85426e9566e3007cc760c17be002f59ea5cdba5f3dfe176cdd09d335d89efcad693dc8e77999955ccb56da54b404d5b55e8088d579c8f0082f01b649e1e1db279c114260c281f83dff19fc02d988a5c2c4edf2fe88876114a8ce661c835a943c61e7e71483b'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: 'bbdd9eb45ecd388b825be75f06ce875d',
33
+ content: '0b779f4240910506cba60f05ed0108e97e569409bffbe9279b56b759d77c4b546f0dfeec050f04ba66b833b998a635f170941ba8b1cfeaad336b6e182f578b5c382fb81ad6a20d4d6a1b71c8e2dbfd0c8e61b254679e8a3029151b1496f0997aa52809d70e316d71a5d5089f822ce1a8fda3ef69ea038c6d4066d1a0a05811b2d5fac3489e98bbea74f55b73e55936198feb95df3ae8addb1b1b935a7dcbd2eacf5c473a9b3f8ee02097a31fa2967ca0cb74a96681c792b9c6b0be231d2544101d2102603fa1683599583f4be739f3a265fb3364e77247d03602f3f8e7d4a8e0d9dbcbe4bf062b85e8702d7dfe5ede8f2ec315a511460de8c98af85cf75fd6ae8b6439acac6b812a59cc79aa61b06633c80bec4e6f9cff1666517cea67824a5b301c265a93a44946f03872a6d417774a182fa8b5303d96dbced73056a1886b451fc3deb2db4108a8b6e075df4e342008e99e06b6c96de015af9f0e3797fb1e0bbd4bcccb91a77f054b2d6b7e856ea182306b303ec6e65c7169b972a5a35a3efb10ed723c28b98a6885851b30420f7294da12944e6edd3d86c16e43dd1cf03823ef0212a647a1ca2b401ee9f18dc7b7d14c26d07b6e283bde575fd038680279833de47299be79490a17247ef388e4f188f4d8873d2a865be437d982b14382dd398216f9afaf3ef146cec0a5bdf9764d820c557a42ce6e51acc9e36d8071a29341d7131fbd9cbda4191f2e20e09a1e684b3b9d341b81485b6540e74db1ddc29d455c75a5a0a5eb7cdd190e2604f4c97ef03b6c47308a653eb5f1145897671b552fb4f1bbfb6c6e44eae72fcdb01584998f4677aa7798e17f9aa12f0cf0d7081f058593bea2520db892c108ac82b480665371cacf410010660c58ad61540befc5d42be6246cfe378b5b1cc27b54f53f803c9a5b799d73d92ac4c02895112301348a4d859ef940f5c4de1e13ac61d85da63128d79c065d04bda1b6eb993ea35b3fa04b0ab566d7e0caaa276c9d5f8e1753b67ada89cc3852fd689e055b5cc2dda3c9f0526fc7092cb809e2373dd4d6a62f3e52779e0a9f3b2a6d82b7b7b20393aaf17fe3b5e4e67e23f69072bcf3d7b5f1d9a4c619d40bc380bef53d8d2472eb125dd3e89cd44a17e2980c7a5507996bf22c0245af052273c149dbecba2914db624d0bad9ad8c1996b0ed65a732d169f07a0cbaafd7157ffcf30892829e952ed9f86663fe88f1969f13a1d4e2ce4354897602983c8e928c06c9fa772376a779fa6bd8dcf29f35ccb231cd7bb2d386de839b2ad908879fe199bfb3523562c3d9d3002805a701cbcd6576668a2558fff33f0e79b5f0ff20b570ac116fb1a8be1a9948af27f5e8e4a629f95974b71f5fc974607358b11bd914d8993c7bad0eac7925bf2e5010365008f16726ae91b51c43f27039483eec741649004d8561c9e05a1375eda4090ba6330f7cae50c6b1ff673f24c4755b22a0f3ae49da37e28db604041f5505c7a297910e5a848479521b99b75144671aef98292cc60db91eea6f63947ecc75fe26a3dbc3a9c1b700f37c7d806b9326a926fcdc6f3374267862d3235e7367f2aed3de0e0f8c0116ce9600b94ff3e0267ba8227bdc6ba0e7372aa8209a27697c0b081b3c92f86a6bfe32dd8d8d5f7a21d9cf2e626cbabe4ffe2fedd507b7d6daebde402ad95b76426aa5fd88f87226ba0270f000c8d2c7cc8cc0fdf53bfd6ac9d968d5d9132a6dfa21ab0a1bb43e2c23dfe08ccc33c3ae6ef59c70a4cf96858728b4758be0a552a82a065ac974a4fa09ce6f26584944a2ab1309132b92f5a80d6aa1b10fb5c64fc54951a28e9b862c003a500b1afe4c96503f919127a3b3f97988fd9827acd2772f6d189abd7f5a11b34dd2d0bde7bc325ceb766f7231c3cf395bc8a801dc25a8197e096bc3d53b92bb175a158cb2e758133542933464684d6ccb4af52985b8537614954557fa34fbd04038bc950bec85894819924359d06c5fd364228779bdc4917e0470ff2e2d697f706c910332732bb2262a44fe735fd436e9698c8a5702c4f440f0acedfadbd2bd522c5d2f0450e64ce8399bdb835f84ffb57fd1e54e29dc75651e446c27145b8e2654701417af8ca131c77e1d8d67a76349f1dfe4cdc27dbcd2c6970407ff69807db3c7926f805baaa8868b21189c4fa6c927313df8d34ae835ff3b91e80a57fb634189fc2d16fbf54fe4e03de0c7396598fde6f0743d09a5544b0f66a533411581cf7ba152701dde5043c0aef42a498f9c66a6dc6d5f45d6a26476044ac24cf99b1976171b9a96134149892dc0d0b591c3711a45a38cc136438921bc47c6d1f2a5f28d2fbeca9626f612dc08aa306fc737838f5e8ab726aecf131d6e5c83893517556261eab6d7bd6bed948fd5cdc96b415a7697d0d3864ea2c8dfa7bd092f2cadcd85db42251ae146e92010471d95b616ae78e7523070add360ed801488c714c731c16a42837247abd2954f952f1a2dc763f9430a22adf713be75b60e87ebefc4dcb246f44681abb2c6d0af8b3e8faffba2613e24a70f234a16c073bd64aad501b5d2e711cec6b7f150d70f5f167991b274a9457a4239184e9c06cf32aa1073c60d6132eb107982e7fcc11df84c2ca28fb549cb5f209e8f48e163fa4b7a18768d43753895791293304dcae5058bf654474863010a059a4bc06abafe3c3a6a880292e964bbfc68c9fe1901a173de66e6b9dd20538f2595d75228f603294838996b67b74b4283d02698acac09163baff7f22a7cba232907aeaa7e1bca63710b83c40810433a733baec09fd1ca503cec4392292f6df889d0577052190fa8a745be3d8b801fd9655f9355676d18327d7955abedac265dfd7a83db0b56ae610e7e8e7f3a616b2236aae4dbfe0ed5bc14d3b648f119d9536bc5e0c11ffe6e30bd2ba719ebde30861bf5564effb6c0f3f1f71ecce963d5960495a3b655f02ea5d58636be7201d1405ff6baf3dc9550972708b963e1e4670bb7f6b3c1629ef4dbeaa3b5f67333196a108b3268b9fba10ed39aa1e4764ac98675b17e7bd005115bc3f6cdc2d604f2e185095825ba8979add2e3da8266b8898eab55ad1b8cbdeecaa61e39d5a90b55c7c497ee818eeed6e0066c038d09429e674b57ab1ed3040ec34d5897461deef65ff7e3717c0ec9ede198a7ff16504f4ec5ce0ea2522f50fef75632d99b3f8c2a146eafdfc88185dd521b8ec8782950ac926fea6f271a67175cd7a99217343c2863e8313c6f63c1fbd03b3675ee45d24ad1c2f77283ffc4ac69d42b9041a5e3ceffe839c04994b728dcdea4c42ec9c11c72af448ecb7c9434d8995423c5e501f51a163558e875d981b865e21e8e93d85c8904af66384b3f63009b42042cfa8626343c85bdcfd9dc7ea83f64afd60e7900e4327f008964da502f9763767fca4fea157e08023bde6faaa3339097b7467a3a665f66d4d5908c97f2078e4b89a77f70b1d0fa015a9f38172ad4dcdb70c4c3cc6f10ad5183627f3ae189463719911116fe1132d38f8149d0fd5e027d7278f4f53a3f0c84677b57329159dea1ccb7b10444932c1c01d206d8c8664d86fd0956e22cba0c3bcbe9e85c2ff3617ec7857e4886fd807004b23d801590762a14040526744a752c76a39657d37d234a228b2afcccf7dc29383515ab907d8c71dadbd774911d69ab1acff4ebd6509ea7101be1b529f6addc7d5194ac6405052d1970cf726a9903ee5bee728c3f92053435cc85574f3e3629d39db9ede0700fbd4f18681dfa82b79b90debd248e8602cbca7838c71b9e1ee9b18ee71dcd2a6b9847a97d3a2e505efe685474b88aa27ef8ddfa6591eb980e644c2198b0c5916aae4b0611bb2ec4f60e779d498b4bb8da80f249765222c0736b84f4660e20c51e075f66e29d82d2535dedd35e91de250ce9b9f1767402dc0a2c02e38898de5831f4152240c9302716d0d9c146e8a2025e4395288f718a8e450213fb3fbb98c2e4d81cdf9f5ed12b09092b956a41cf7319538c2fc4d1c7b102fedfb6949612e0b2496acc30be4a106ea70a2531b7d123d73fd34c2ca63cb2699f5ce397e275b878444eef843b9b7867d963d84dafe1310a5cef3df916fc3208de55d78c829e414ac32358fdaaec590efe38cf72e8ee23b5d37d1cc47e79fcf7e65d1f6f9f1cfdc5db0eb6434d5081597a0439b2cc2a5903c523d5fed8e718bdbb22b61eb1d6e9749b20365fbf4dd7ef739aa3d813b199fe4f722d3c7ee3072755e2f6e3873059af5816cbc765df8542375d11ddbc0431b252b6c79baf9002d89a4917865bef369bf1c8109834ff49d6ea30e3ba65e82ddaa2cec0c485c89d3afa226f4eec724d28b9f43e0fc868a23b2d3d02b2288e01c03f361b1e0a1f1f19c53f27012f2d0e3379ee59518f2f4f6b7bc28b770978f6a5969d90453f6687810d036dc943bfabeccefe58e37cec571381b17aa8ab0bd6d8cd1341c9aee19f37fc1710d330ff674c3ff178197e47fc24782e8a21ae62f669b2ebf0c70c3b67117112d1f1d812c592af80cb5ddf6c5626213500a3c98d49f0d54ddcca213b16e81e48cbd9b713533eadf7fe8734149eba30fd16d75a0803e7e10de95a8bc4e24423ff152f1e0e0fcb7a2a424faec009a7a83d55e2499acabb0f689bf20524b59f7fbb5177367706cacd3c5d843cf3606cdd02b2824099edc6a816fe2d571ae79da2eee4946669f86626e3eedfcb594229ccdc5a224c9cbb6ad9b8f00bf9434d2ec6453b1bbc2b5cae16be1c87fd1a1e03404a4ae96a97552150f3d368102cc9cd1a7c62211a17cc0acb7771551292505860918f97d8da13a63262f3a39a1412709f50bcaaff9e0f9b361d8cfadeebb549677181227ba4552'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '9641e7f4e16013aa406a3a8085524745',
33
+ content: '4d6d13e1a1404aa04bbdd4c555f1692dc3f8380ea695019478326a20fdf32e1a24431ef2c42b1f2333044189a480e1a035d6c691adb06fe0f592ff352a78b8938c277520e5f761a8d498556d4baaaf2d134da51058382d58b2e85ebf2e3ab6b568569b6902625a8c64eafe5d5a20bd9c3e184a76315776e73709324700d1deb02f591cce7e0caedeb2c881e76fa284270870bdd550cae5d7fe2a289f61866d8e98d697a157317b1c7323a1ca40fdb0cbdd4c4f6983747642fda89b2216362ea3c2dd380180cf32afb9e07b90f79d3134aca3755c204c2dfc42f77b8dc423a64e83c26af3a8f8962172fd21829dc599941f58b2628192e76a2ab391d5fffef1ed8a87a15cc0d7f47256f102d2a74897236b0d17d1b9d933bd4c2de6ecf0e155a52316a874f9886d574279d6f9bddfc6a78ae8b91c33670048e41ddcbeeef6cc91036cba562c3b164d6ce77e02a74b432ff020b2ec0fcb67391a203cef38789a33b371c70c201dcc2d455ad6a8939247a8a50b445ae0524c5d2407ee0a4a761e5c80b52ee27f8fcd79847984f9beb1ad0a9577576d633614bffeb016faee737e3721eefdcf9548c480c793d16e84631c7d78939cf89b5de915624d6b537d233c8337cff2cd69252a568251289faa2071c7468c3155549477e3c165cf8c33b62f292a609c96fbc06d8a24077f07f526dccb01849f10cefd5370da36cb57506b9dc63b3c135e36632f2fe47ddcfc218445a5c655aea313f09688730791067cbeefef56d701111969940f416d261e5e8b0ebbb9c3396f0785c58ce670c0b7dc89e1c1ca2a0b5a5c55567d10bbc0fff4f9316d17b898394a86bf998996fc93447aaadc5caa579e3f8d80f4bf0ad26508bd2c38047128ceec53b909cca01cff10601417bc5d70fd7d2ca424a82c79c357f67776f21c5f2d76bc20249ede98aa43f4eb0a1ba70c955836e3ec2f8936aa5009b521e153a25724aa75d1beef927f9d41718f8aafac02e8a0fa09995783c22e6ede5163e582aa2648a9cfbe675201c6a0afbd219ffdacf368dcf68ba94e947a50302671cb8727e5b93049d417f9711f658caf6d7cb4f1ec007800104da3251af0e2413903697339f66c0e3147740da78653877815a8629d0cb75a79463809265888744f376a7ffb8951b1631524b1b99e04e754d2bd092aff07049c3d939e593d10d14a557010d1bad87d15fef893235d098c044b82dadd7ae3bb7ad2ef4eee54355c8b7bbb5c5c3356c1ca08526739bcb617abfefb2c2990ec2600d6459e2adbb5cb202e4e33b61b6986bc7774d4daf9f4f27e6124df809b0dc261f5c9627691bf8191b34690eef499018ba3a976e52927cb7b8f5243eb81a99ae004de3080a8edc297fc717371d68f58be2d4f4afce2dff48cd206d09ede75735485c900eef395f36ecbf98934637388293bbfe1c86d557efd9639afab618c66b82498d88643ea13552b814cdf54041955d871ddff3f709a1869ee13dcab153255f1c1589513c8f482d75e62de63dbece6c33520433bb3882324fe9b448a60577fb08340fd1cfe4b965d8c0428e611aeb3b2eac088e4b8f51b063da8255d5b34b14a3cff27475c9ee3dfa9ad40e4f313c8cec5658717fc7498debb69dfac57732967b5dc5913f4a5cfc90f9445b3b6b518587bfe033778fc6e04fce4eeac5002e8fca17ca3870fa8fbd1867205e9ebe950eff582a7638e5bb8c775a645f167d857fb4c7bb9010ab34a8dc1497d90b85e173aca94f820fa40e10fe119fb35737776f9938b752e27fe1690710639eff2dd9fa96a17702b33c7591412f1c929a0b36121d4ea7555afad4117215c025a34e0373526576dbb13a0b491dffb006f40a1f70db469daaa2f66644dcd2185795598a05754bfc5f6ee2d6acfb9ca2fb22cee75ba57dc9230a3414115fd5d93646d22989d5e5862bb265566b58ca369b0adfc99c9e97c005ad745f74c629009f280079b65d128db3672404adec8237d426a13baf8b0dcf2e69fd00382b23ab475081066e9baa615b57ff910e1dbca2deb97bf3bfe62b211569114c2c6100adb35647d3d7544214b235f3c9628359bfdc1240249f19e09e92cf8909db33fce69fca39ee42744dc301d61d1c6c4ef5894f6d35ec4fe79ae63c970366accca0bbb7e37c3500db0bdb15679ce5748c6c57222f6697243da759d8b4d946f0215fbbeda665be6327e1333736f9f571f2a28734513ca7681594e577dfeebba1e1cced862e21f66153346741ded76b280e2d836b0a55dc56564fc04586ba38271bd8db842a901d452822a829d6c86022366ee37f81670b294c4b901abe9c2b554c85cb1120a6e324ec32ff681dbaccf2019097cc64f9e75590f73b8dc225648c9b23470bec3ea4992e81b9a74d4810c9de58aaa28ac15a01c054ac8d695a840e3da24f7e514558b8833bb24784b9b32d2858d394457a83ef0d65b2ea5815abefc72f4ccde30aa09f20a5e32fb117f66f03b020e736b5a7ac0be58624b2024657972b718c3a22e1e478d66e0ed375e04ab6c222c906029c9b5700ec2125cc09716a3376b25600eb695f118b84896f4c226c810c3562586a892c40b43739d1926526bb85a9fbd5f723f96290028245cff70109d5e0fbc678c6cc8b9ad2ca0f0b847e874c21817db65b7ba0162a23e4ddbec7f1806df7a4bf9b555adb947684803f11dfd47b40124570d560f2b4d92ab3359bc7441eedc525935ffc70b9d98e7a9f38169ad732f471f859206991337e13e60131b799dd117687d02217576c3f87cdb03bf4bc8b9852fbc3afc91e1b88e3d97e96efdf415a8aecf32d723274934e0620631f140d936d7d30b36c7aeafb755515cfa45594b1cc63d6306ca03726e2ed6c7f10468b4c54ac8a9ab5fe039ff1c681434e4af994d48fda8a8055fba215dcddce1dcd4aad48a6f8243658daac5dff397f574d497fc731a1b7c6e8b68d6ea6bbc1737fd61eb5567ffd4282768a2f618b0f7e2b6ec34e63999f3adaf731b890e151ed3712fb1331faca5c3459069a30de974da47cf40651b662404b10f3bfc8978f545a5a47200171904ca6b24878d6b495127383cccccdb4a040ba9c370fe8a069e58d9cc71ac7b77a2673732929129481675e066c11d7aba693be3eade0853633c80fdb534f414e37910fe8b66c2907e50d662f26065f0bdfb2b020473fb9cdccb216f919b539cc491ce1e9fa6549dfc99972d98ebd9042ca5435945c4d7151b69912a38c4a6e49e56e0ced087b779a4ee55e7142fba15c486619e54bc4d04ca1fa55362d12c6cb6566d27dbb39b965aa0f0cb08969dd326e6cf9858f3c0ff52c4406a81ced66a605706b6e594883dfb1f2bf978fff51196b6f67ca8951ac08fb92e07b2fd57fc356862bfbf946982856d7c4127fa736d4adc9b150b4df581d62209e666a6d4fc6fbf379d603829098f28780961d2fa5b24ca18e7d284dd6056a282c994acaaf7d44dfd98b57c1f3002f0a6d041a64b198c5bd3a58f07e305b683aadb1f01d8708ad72b11d55a6a7d5810186b7762ba0bd161314c43e77732a028df39d3d46b9b6286e8ddd6c9e3a250d36e0aa6dc3ca6e0b323795b4870c124c8852e2e356f49167da765ba129e0779976c15f7589dc07158781ce4bb172d25a28531def94682009a978e499c63023bd83f9545fad05e4031556888cd143d0b23b4f764eb0f534080653ad5cf62ff5c1f72683ce5b54c69ef564d571ee2db92d66c77479d567627199ac862ea8aa59d0caf88332192e1bed95cefab5f28f55347ce07ee85479e37d5982e87b381243055adcf84d4de9c97d190dc80044e7f2af17d7f402d322a12d912b9b66ed144fdf742d5e64931ff7ac6f474737cc84fe2afefb07550371f91af0f455f765d93132eb1c9101780c45b341ae08ca214e562933ccc9c62fdd1f2df1fb7fb8e8640461ed3f404bd64cded234fca870420b8994ba5f486fe00e8f6bc80e14bdd335b9556c1e187d6d5d41a4725df2fcd9790ab819ca570928a0975edf986bab190602847df1e6e11fc5931ad7f005bd37ba69d689303e8604cbadae18c6c18843d605b6da4c59068f4d7a6259e06f70e330927463bf4488dfbd552964901858418521b8e54ec2307b9611a0f52cb029e33f07c250ecbf56381f6b827020e8511e8d770574ceef2beb69874ab100c96fd8d671acc72bc8f47d07094d4ff19b5a0cab5a37a5ad5e1a9060a7f218d945884a0c18ce85a0780748bf5c47654cc560c265af0f4d0fa07129dc7cc20a661686ff6466436337056c14fb41ffcddc7ed0c0fadc3c0b375dd79b83a71456504489057688e9641aee72b55b46e4d417ae90d5c08628f4160851c46105c001466a478c5b8187a392f1dc7d53b32b19518a9dfa4cfc8ceee57a9883a5df41ebe3287fef26f70d858e8edea0bc9321568a6b0df4b0e938b896bd353b18972ac288dcd335801ffc5cf6878d3a1e81cb30781b2dae93b0dc9470dbfe9f7f27f491c92d4e0f1f425c34f0685c8b57635592e84d8d3a5f7d3960bc132f56199e83c022dda774d3304b59668e1cf7e157bfb0fe44b3d17b077f0e65cc82473e10168dda68521cdc4db12187e5f94d2a27a279594255103a28548505eaf0e22c250dabe1d0e41d06601ebc3170115eaa3e5de9290a5ea916725ef685c435308f4b9ca613651cd8c8379feb514910d86b44ebd545e6bc3d1e4a69eb1cbfe07e665aa9636d60413205f9d2dda4af5dafbfa1e480f9b3a41e571fb7620b6fbfce9463ff184cd460e5b3872f6e33e91713cdc12a06f18177a'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Protected Shell Script - Devicely
3
+ # This script is encrypted for code protection
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ NODE_BIN="node"
7
+
8
+ # Check if node is available
9
+ if ! command -v node &> /dev/null; then
10
+ echo "Error: Node.js is required to run Devicely"
11
+ exit 1
12
+ fi
13
+
14
+ # Decrypt and execute
15
+ $NODE_BIN -e "
16
+ const crypto = require('crypto');
17
+ const pkg = require('$SCRIPT_DIR/../../package.json');
18
+
19
+ function generateKey() {
20
+ return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
+ }
22
+
23
+ function decrypt(iv, content) {
24
+ const key = generateKey();
25
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
+ let decrypted = decipher.update(content, 'hex', 'utf8');
27
+ decrypted += decipher.final('utf8');
28
+ return decrypted;
29
+ }
30
+
31
+ const encrypted = {
32
+ iv: '9adf336c1b69fd9cbd2cba4651b26b02',
33
+ content: 'eed017d5db204cb2f2933ffa4eba37cb97a375004b28a965baa187e40f03b474089b422e7cd0c83fe5de0b62dce15109c9f4fe487b3ded6566c92a3488f1a72e7efbcfd8a721f4285151728b93ddfaea534527d103a1ade8bdc6d2d118e064f7d025c66f16e9c093555fbc2c117d709cbbf6e273e61edb23c2429f4c132aa75c2aa8b3cccb60589ba849757deaac75b85419c165809afc41ab9f36ec18e6c8e85d38ce38f2b14f497c2b2be435a1119ec98203ab6118a25a8b66ae98be89f06dc8d8e377b3df0942d66eb2ae9f87e65a36ff7d06b89f759b5f94220dbab286ae86138f32bafc76303ac8bb397a8a118aac786403446d81ab08250e8291a60223df7a64f7567d523aa31603560da19de4bfd5c043c920b1b29c57a5ea59bd0ede0f68b4f57cedcbfee50ea7e127174070d0e23c9de59cb00c040ec32211a5ef63b0a4c7b01d6a9c5e1084211ef5d46fbaeae3efc287293edffeb892ecd427370893b640adcba846abf96fcdd1b96782c72194802d76fa2120b024b211ccea4dd107c3c5b07876f8ae938b7dcda8356525dc20a566a287c7a145754ffd575f1574f37c4bb817f51e6f224e0c8eccf2fa64dd6f2ecf6e630f1155f1b7b3687deed302727e6108511ec8067c274419cf578d8498a9977a8a15a9235e08783f491d1b60282ccf27810c9d12286961ee11313c61d056378f01c672cf294896214d994d01f935900d999976351ac3262777c60a725bee13bf7174185f1ce03055b49e6c7f050fb38872d82e73bd1995d262bbdcd7b56cc4ddb4bcb029c24a281ef39dee44282e83b4056d09ca877863a741b355baefe4cb800c419f94d1c95259a1ef4b64f0a4107dccfa90f8e63ce82e6d51b17ab9ec8a1fe72a3240f2e84f5d5216e831f258af0b1783fa95bcf2ce6d01879a8e20cdcc0f4530c469439b699fc7b37dce0bc4b4120d42c830dda655e5b9b45419a56858b74492b255846c8d98d05c1ed80c9d73ead725e14dbd1250524e92c2dec1b2496b8281229421819f489e6d0c79b99a08ec8b9e00271ee8bec53fb5e2adec85d3d6a7c06bd55368d306af61d8815da62c9610f94fa2d5eb9c60d2986d1fdd9ab4d2919cb6f424005473bb9b9608db68ca176d8c73c2a7978da2568c02958331c5467d277652e5bc41e41f17344c1bc23fccbab53ff9e38edc9beda32227a1cb2793bbe81303fb869a9c67aa53d65b9411a545596fb9e96a723341d675ba6d7746687e8fad536f49e5ec6aacc26f01bddf2b1617358dda2f5aa9b74e1c7665d03a0302b97b9db46e666990a35cecfada1dc3f810212061eb41419865c41e02f557ae4ab20826bd56b6acd5124c0e41c719d2e1da806fb4f62d106aad6bb9176d691af72df709d102fa6c64b3dc95856c816b9d1d52aa2224e44bca3ff44351330ce643b36f0e83e07e00f2cb775766ae76b55cff2615a74ab85c947b73cfe3f80799dcf21b4aec0dee6530bc5a9a58891841e5920c5e88dce5c6f38a5ad3caec887e496c28bcda2c48bd3c9db6cfb8f557056f94d873da78d6221c13640f5d6a4ce90dc8a5d9735bf0d6dffea40cffc48067615f77b0bf140534b459c3c4cd6f2d9ed220151ab710273c3f8110a8c974e22f55aeb98a59b60f4669ccf568c0e3bacaf2070994bcf90b00417299516fecea1e4b78d6093c3f81b4967e36496dca77a8f8c1c987e8bba2b1f5700b7e14758e3218da8d8d24d3c891abd38d5413f5334374ae6c0f19b7dde331da0812835386de5cdb0e1ded3057c7f32d82f01ebce3b5dbb22f21f08a5883dcdb3097ba5c0d1eabe9b55362d96ed2557f727751ec38df819698680b0d819aa571b3ec941543d31b29ee18ed404c4699181a148a298ea5795798b36ed2597e038f703d948b8490df6626f332b372c6980e3a17857307178251ac498c614cc2304573490845ee81ac648ca13fcbe28a5ccb7c7e7308f287324d1584c06e8cc7eb2b654f2bd045c2ae9d71262fd08b77178b8d6339a3c1417865ac03c07e133a58c9892fed9d2d7e5e2fb4b776a521058cc2ad98dfdfa9ad70740e784a2f67ca3531735e6a7ea1313cd842fe34eafa2b279059b901e8396cbcac9e1fd2cbf25b78e295755b016d6c22c3eb11b0709061340432d5e5020133f4c635900c418aedc5d12149c6ba36ae06f926dca2a5a2b4091838'
34
+ };
35
+
36
+ const script = decrypt(encrypted.iv, encrypted.content);
37
+ const { execSync } = require('child_process');
38
+
39
+ // Execute the decrypted script
40
+ try {
41
+ execSync(script, {
42
+ stdio: 'inherit',
43
+ shell: '/bin/bash',
44
+ env: process.env
45
+ });
46
+ } catch (error) {
47
+ process.exit(error.status || 1);
48
+ }
49
+ " -- "$@"