Browse code

added CHANGELOG.txt README.md appinfo/info.xml appinfo/signature.json phone/scripts/app.js templates/settings.php css/style.css

DoubleBastionAdmin authored on 22/09/2022 08:46:22
Showing 7 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,31 @@
1
+======= CHANGELOG =======
2
+
3
+Versions:
4
+
5
+== 1.0.0 - 2022-1-27 ==
6
+* Initial release.
7
+
8
+== 1.0.1 - 2022-3-3 ==
9
+* Added screenshot image and made minor text changes.
10
+
11
+== 1.0.2 - 2022-3-4 ==
12
+* Changed screenshot image.
13
+
14
+== 1.0.3 - 2022-3-30 ==
15
+* Changed presentation text.
16
+
17
+== 1.0.4 - 2022-4-19 ==
18
+* Changed the URL of the pop-up window, to make it work when Nextcloud is served on a subdirectory.
19
+* Changed image displayed on initial screen.
20
+* Changed presentation text.
21
+
22
+== 1.0.5 - 2022-5-9 ==
23
+* Changed syntax of SQL queries and encryption function.
24
+* Modified pop-up window URL.
25
+
26
+== 1.0.6 - 2022-8-20 ==
27
+* Changed presentation text.
28
+
29
+== 1.0.7 - 2022-9-22 ==
30
+* Fixed error when not entering a STUN server on the Settings page.
31
+* Changed presentation text.
0 32
new file mode 100644
... ...
@@ -0,0 +1,126 @@
1
+<span style="display:block;height:15px!important"></span>
2
+<p align="center"><img src="https://git.doublebastion.com/sip-trip-phone/raw/develop/img/sip_trip_phone_logo.png" alt="SIP Trip Phone" width="171px" height="119px"/></p>
3
+
4
+<span style="display:block;height:20px!important"></span>
5
+
6
+**SIP Trip Phone is a browser phone in the form of a Nextcloud application. It can connect to SIP providers via Asterisk or directly.**
7
+
8
+It can be used in conjunction with Asterisk, to benefit from the control, autonomy and advanced PBX features offered by Asterisk, or without Asterisk, if connected directly to the 
9
+SIP provider. For calls to and from regular phone numbers, a SIP provider like Telnyx or Localphone is needed and a real phone number acquired from that SIP provider. If Asterisk 
10
+is used, it's recommended to be Asterisk version 18.0.0 LTS and it has to be installed on a VPS or dedicated server, as explained in the documentation mentioned in the 'Installation' 
11
+section from below. The web server has to be configured to allow access to a specific directory and to proxy WebSocket traffic to a specific URL, as explained in the documentation. 
12
+Not all SIP providers allow connections from external Asterisk servers or direct connections from web applications that use SIP over WebSocket, like SIP Trip Phone. Thus, you can 
13
+connect this application to Telnyx, Localphone, Twilio, Flowroute, Vonage, etc. via an Asterisk server, but if you want to connect it directly to the SIP provider, from the 5 
14
+mentioned providers, only Telnyx will work, because the others don't allow direct connections from web applications using SIP over WebSocket. SIP Trip Phone is based on the ctxSip 
15
+phone.
16
+
17
+<span style="display:block;height:20px!important"></span>
18
+
19
+## Features
20
+<span style="display:block;height:10px!important"></span>
21
+
22
+* 📞 SIP Trip Phone allows making and receiving calls to/from any mobile or landline phone at lower rates than with regular phones. It is known that VoIP phone calls are up to 70% cheaper than regular phone calls. International VoIP phone calls can cost even 90% less than regular phone calls.
23
+
24
+* 🌐 You can acquire phone numbers in countries of your choice and make cheap international phone calls to receivers in those countries. When calling you back on those numbers, the receivers will pay as for local calls.
25
+
26
+* 🆓 You can make free calls over the Internet between extensions configured on the underlying Asterisk server.
27
+
28
+* ☎️  SIP Trip Phone logs recent phone calls and their duration and allows pausing, muting and transferring phone calls.
29
+
30
+* 🚩 On-screen notifications on incoming calls.
31
+
32
+* 📃 Once you open SIP Trip Phone, you can use it even if you are logged out of Nextcloud.
33
+
34
+* 💻 If Asterisk is used, on the underlying Asterisk server you can implement an IVR (Interactive Voice Response or 'voice menu') and many advanced PBX features such as voicemail, queue management, music on hold, number blacklisting, call recording, audio conference calls, etc.
35
+
36
+* 💰 The only ongoing cost is about $1 per month (depending on the country) for a phone number. No contracts.
37
+
38
+* 💸 Low per minute prices: if Asterisk is used, you can make calls within the US starting from $0.0050 per minute and receive calls with $0.0075 per minute or less (Telnyx), or $0.0060 per minute for outgoing calls and $0 for incoming calls (Localphone). If SIP Trip Phone is connected directly to Telnyx, you can make and receive phone calls with $0.0020 per minute in the US.
39
+
40
+Double Bastion is not affiliated with Telnyx, Localphone, Twilio, Flowroute, Vonage, or with any other SIP provider.
41
+
42
+### Donations
43
+
44
+* [Donations are welcome](https://www.doublebastion.com/donations/)
45
+
46
+<span style="display:block;height:20px!important"></span>
47
+
48
+<p align="center">Initial screen</p>
49
+<span style="display:block;height:10px!important"></span>
50
+<span style="display:block;margin:auto;width:412px;">![Image of SIP Trip Phone Interface](https://git.doublebastion.com/sip-trip-phone/raw/develop/img/sip_trip_phone_initial_screen.png)</span>
51
+<span style="display:block;height:40px!important"></span>
52
+<p align="center">Dialpad</p>
53
+<span style="display:block;height:10px!important"></span>
54
+<span style="display:block;margin:auto;width:412px;">![Image of SIP Trip Phone Interface](https://git.doublebastion.com/sip-trip-phone/raw/develop/img/sip_trip_phone_dialpad.png)</span>
55
+<span style="display:block;height:40px!important"></span>
56
+<p align="center">Making calls</p>
57
+<span style="display:block;height:10px!important"></span>
58
+<span style="display:block;margin:auto;width:412px;">![Image of SIP Trip Phone Interface](https://git.doublebastion.com/sip-trip-phone/raw/develop/img/sip_trip_phone_making_calls.png)</span>
59
+<span style="display:block;height:40px!important"></span>
60
+<p align="center">Transferring calls</p>
61
+<span style="display:block;height:10px!important"></span>
62
+<span style="display:block;margin:auto;width:412px;">![Image of SIP Trip Phone Interface](https://git.doublebastion.com/sip-trip-phone/raw/develop/img/sip_trip_phone_transfer_call.png)</span>
63
+<span style="display:block;height:40px!important"></span>
64
+
65
+## Browsers
66
+<span style="display:block;height:10px!important"></span>
67
+
68
+SIP Trip Phone works with all the major browsers.
69
+
70
+<span style="display:block;height:20px!important"></span>
71
+
72
+## Programming Languages
73
+<span style="display:block;height:10px!important"></span>
74
+
75
+SIP Trip Phone only uses PHP, SQL, jQuery, CSS and HTML. This means it's robust, efficient, light-weight and easy to maintain and debug.
76
+
77
+<span style="display:block;height:20px!important"></span>
78
+
79
+## Minimum Requirements
80
+<span style="display:block;height:10px!important"></span>
81
+
82
+- **Nextcloud 22+** has to be installed and properly configured, preferably by following the Install Nextcloud chapter in our guide.
83
+
84
+- **A telnyx.com or localphone.com account and a phone number** associated with it. You can use a SIP provider different from Telnyx or Localphone, but they have to allow direct connections from external Asterisk servers and/or from web applications that use SIP over WebSocket.
85
+
86
+If you decide to connect SIP Trip Phone to your SIP provider via Asterisk, you will need **Asterisk, preferably version 18.0.0 LTS** (with **chan_pjsip** enabled), installed on a VPS or 
87
+dedicated server. You can also install Coturn (version 4.5.1.1 or newer) as a STUN server, which facilitates connections when callers are behind routers.
88
+
89
+<span style="display:block;height:20px!important"></span>
90
+
91
+## Installation
92
+<span style="display:block;height:10px!important"></span>
93
+
94
+<a href="https://www.doublebastion.com/install-nextcloud/#install-sip-trip-phone" rel="noreferrer noopener" target="_blank">This chapter</a> of our Complete Guide to a Complete Linux Server 
95
+explains in detail how to install and use this application. It also contains the links to the chapters that describe how to install Asterisk and Coturn.
96
+
97
+SIP Trip Phone is a component of RED Scarf Suite. It can be installed and used alone, but if you want to install <a href="https://www.doublebastion.com/red-scarf-suite-components/" rel="noreferrer noopener" target="_blank">all 
98
+the components</a> of RED Scarf Suite, you can follow our <a href="https://www.doublebastion.com/free-server/complete-guide-to-a-complete-linux-server/" rel="noreferrer noopener" target="_blank">complete guide</a>.
99
+
100
+<span style="display:block;height:20px!important"></span>
101
+
102
+## Contribute
103
+<span style="display:block;height:10px!important"></span>
104
+
105
+This is the official git repository of SIP Trip Phone. The <a href="https://github.com/DoubleBastionAdmin/sip-trip-phone" rel="noreferrer noopener" target="_blank">GitHub SIP Trip Phone
106
+repository</a> is just a pointer to this repository. We don’t use GitHub for developing SIP Trip Phone because GitHub is owned by one of the companies that proved their disrespect for
107
+digital freedom over the years and because centralized services create autonomy and privacy issues, in spite of all the benefits.
108
+
109
+If you want to contribute code to this project, please submit <a href="https://git.doublebastion.com/sip-trip-phone/pullrequests/contrib" rel="noreferrer noopener" target="_blank">this form</a>, 
110
+mentioning your intended changes. We'll send you the credentials needed to push code to the "contrib" branch of this repository. After we review the changes, we can include them in the 
111
+project.
112
+
113
+Please post any bugs that are not security related, or feature requests, on the <a href="https://git.doublebastion.com/sip-trip-phone/issues/develop" rel="noreferrer noopener" target="_blank">
114
+issue tracker</a>. If you notice bugs related to security, don’t post them on the issue tracker; instead, send them to manager [at] doublebastion [dot] com .
115
+
116
+<span style="display:block;height:20px!important"></span>
117
+
118
+## License
119
+<span style="display:block;height:10px!important"></span>
120
+
121
+SIP Trip Phone as a whole is licensed under the GNU Affero General Public License Version 3. If you use SIP Trip Phone or distribute it in modified or unmodified form, you will need to comply with 
122
+the terms of the GNU Affero General Public License Version 3.
123
+
124
+This application is based on the ctxSip phone and the original copyright notice is included in the appropriate files.
125
+
126
+SIP Trip Phone includes libraries licensed under different free software licenses. These libraries contain their respective original copyright notices.
0 127
new file mode 100644
... ...
@@ -0,0 +1,86 @@
1
+<?xml version="1.0"?>
2
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
3
+      xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
4
+    <id>sip_trip_phone</id>
5
+    <name>SIP Trip Phone</name>
6
+    <summary>Browser softphone</summary>
7
+    <description><![CDATA[
8
+A browser phone that can be connected to SIP providers via Asterisk or directly. It can be used in conjunction with Asterisk, 
9
+to benefit from the control, autonomy and advanced PBX features offered by Asterisk, or without Asterisk, if 
10
+connected directly to the SIP provider. For calls to and from regular phone numbers, a SIP provider like Telnyx or 
11
+Localphone is needed and a real phone number acquired from that SIP provider. If Asterisk is used, it's recommended 
12
+to be Asterisk version 18.0.0 LTS and it has to be installed on a VPS or dedicated server, as explained in the 
13
+'Admin documentation' linked on this page. The web server has to be configured to allow access to a specific 
14
+directory and to proxy WebSocket traffic to a specific URL, as explained in the 'Admin documentation'. Not all 
15
+SIP providers allow connections from external Asterisk servers or direct connections from web applications that 
16
+use SIP over WebSocket, like SIP Trip Phone. Thus, you can connect this application to Telnyx, Localphone, Twilio, 
17
+Flowroute, Vonage, etc. via an Asterisk server, but if you want to connect it directly to the SIP provider, from 
18
+the 5 mentioned providers, only Telnyx will work, because the others don't allow direct connections from web 
19
+applications using SIP over WebSocket.
20
+SIP Trip Phone is based on the ctxSip phone.
21
+
22
+### Features:
23
+
24
+* 📞 SIP Trip Phone allows making and receiving calls to/from any mobile or landline phone at lower rates than with regular phones. It is known that VoIP phone calls are up to 70% cheaper than regular phone calls. International VoIP phone calls can cost even 90% less than regular phone calls.
25
+
26
+* 🌐 You can acquire phone numbers in countries of your choice and make cheap international phone calls to receivers in those countries. When calling you back on those numbers, the receivers will pay as for local calls.
27
+
28
+* 🆓 If Asterisk is used, you can make free calls over the Internet between extensions configured on the underlying Asterisk server.
29
+
30
+* ☎️  SIP Trip Phone logs recent phone calls and their duration and allows pausing, muting and transferring phone calls.
31
+
32
+* 🚩 On-screen notifications on incoming calls.
33
+
34
+* 📃 Once you open SIP Trip Phone, you can use it even if you are logged out of Nextcloud.
35
+
36
+* 💻 If Asterisk is used, on the underlying Asterisk server you can implement an IVR (Interactive Voice Response or 'voice menu') and many advanced PBX features such as voicemail, queue management, music on hold, number blacklisting, call recording, audio conference calls, etc.
37
+
38
+* 💰 The only ongoing cost is about $1 per month (depending on the country) for a phone number. No contracts.
39
+
40
+* 💸 Low per minute prices: if Asterisk is used, you can make calls within the US starting from $0.0050 per minute and receive calls with $0.0075 per minute or less (Telnyx), or $0.0060 per minute for outgoing calls and $0 for incoming calls (Localphone). If SIP Trip Phone is connected directly to Telnyx, you can make and receive phone calls with $0.0020 per minute in the US.
41
+
42
+We have no affiliation with Telnyx, Localphone, Twilio, Flowroute, Vonage, or any other SIP provider.
43
+
44
+### Documentation
45
+
46
+* [Admin documentation](https://www.doublebastion.com/install-nextcloud/#install-sip-trip-phone)
47
+
48
+### Donations
49
+
50
+* 🎁 [Donate](https://www.doublebastion.com/donations/)
51
+
52
+    ]]></description>
53
+    <version>1.0.7</version>
54
+    <licence>AGPL</licence>
55
+    <author homepage="https://www.doublebastion.com">Double Bastion LLC</author>
56
+    <namespace>SIPTripPhone</namespace>
57
+	<documentation>
58
+		<admin>https://www.doublebastion.com/install-nextcloud/#install-sip-trip-phone</admin>
59
+	</documentation>
60
+    <category>office</category>
61
+    <category>organization</category>
62
+
63
+    <website>https://www.doublebastion.com/sip-trip-phone/</website>
64
+    <bugs>https://git.doublebastion.com/sip-trip-phone/issues/develop</bugs>
65
+    <repository>https://git.doublebastion.com/sip-trip-phone/develop/</repository>
66
+
67
+    <screenshot>https://git.doublebastion.com/sip-trip-phone/raw/develop/img/sip_trip_phone_screenshot.png</screenshot>
68
+
69
+    <dependencies>
70
+            <nextcloud min-version="23" max-version="24" />
71
+    </dependencies>
72
+
73
+    <navigations>
74
+        <navigation>
75
+            <name>SIP Trip Phone</name>
76
+            <route>sip_trip_phone.page.index</route>
77
+            <order>101</order>
78
+            <icon>../img/sip_trip_phone.svg</icon>
79
+        </navigation>
80
+    </navigations>
81
+
82
+    <settings>
83
+            <personal>OCA\SIPTripPhone\Settings\Personal</personal>
84
+            <personal-section>OCA\SIPTripPhone\Settings\PersonalSection</personal-section>
85
+    </settings>
86
+</info>
0 87
new file mode 100644
... ...
@@ -0,0 +1,369 @@
1
+{
2
+    "hashes": {
3
+        "CHANGELOG.txt": "84634092f5b7e65569a8f8ea1672c854ba58f7429c650c2c1b62ad462f83776c5b31fa6ab087b1ea71839fffc47a4aea4dcff0ceeedf229ed2ded854f83a2b78",
4
+        "COPYING.txt": "a0a86214ea153fb07ff35ceec0848dd1703eae22de036a825efc8394e50f65e3044832f3b49cf7e45a39edc470bdf738abc36a3a78ca7df3a6e73c14eaef94a8",
5
+        "Contributors.txt": "3aa56949f3b311d19322a7b31511a94fa9c796f3fb42a929887a0064482fb1f8c125bb21bab405d764aae329c6c65231235134d721aa364c39cd6fe5400c031e",
6
+        "README.md": "5e9b4388d4555348a61c250a6d06f856fe6ba1d6df73a9285d2b3aaa1e2c8182e8b2f638a4105f6d642696929250ccad39c90dbca2b50566870ca46e0daf2446",
7
+        "appinfo\/info.xml": "ba24e0051a0cca8bd4c85ec3438c03f356b368728e1ff514697aa44fd20a0b55528664c50c79ef11d73649221332f67af30aee0bdb16898d9b1f2e2e2e44efda",
8
+        "appinfo\/routes.php": "8dae8f6d5e152b052b28459a7c33fc31b4a6f4981af58028032630500c9d4d2bd31271de1627cae6f17eee827905ce33e7e2a95ea96b335b2324c838ed1a2286",
9
+        "css\/style.css": "734fd073e5da1b6c7d2cb98fbd9240ac0d05b04512462e709b6bc29ff0d7286a01f41058fecc95ab93f66e36d3663f77b08f93d7bfc8359813b5c6d8d2eff0d0",
10
+        "img\/sip_trip_phone-dark.svg": "e56b38a7738e4a6f8700be79918e732dacbd00a027bb9c4d4dea132731d5a7011951423861486d55b01b4b153d7b72d83028dbd1aef5645091e270d3c6418781",
11
+        "img\/sip_trip_phone.svg": "b280f77152cd2cbfdb075d0550aeeebb9df34b8fe9e4fa371f7d42bf53fea7afb24da9e5112c7e3b3c9ef868ad361b5456b57979825c332f66434e46acfeebbd",
12
+        "img\/sip_trip_phone_dialpad.png": "5dd694cf9f18c21170c2d03e6f5ae245ecbda55d92c2eef04a20728d54831ed730e3c7abaca2f4de7e55283f4b18f97ab9088e168ad6d925906438c7eb9cfff2",
13
+        "img\/sip_trip_phone_grey.svg": "5524c9e00c015d023d7a9d8f3427eddb5d94b88551d140528487eea84c6c62b905ce12b53824397f878d214e6911c7fea8ebbc4bff64ef275d443239e70b2767",
14
+        "img\/sip_trip_phone_initial_screen.png": "3c2d70403b923b11acd60ea41ef6e640788e667c7688bce672c8328e6d0db388eab8f4f8d0acccefe62a69944c36439dc45894603a77d1d847a7bfe03445d5b1",
15
+        "img\/sip_trip_phone_logo.png": "3309a656543c4fcec77de1356c88f834cc244d423767c5ebe2f8b90b27b738bc426f3cc0e9141220e37c51e4a15791743539b694ce6826b97ee929b8d8e9a098",
16
+        "img\/sip_trip_phone_making_calls.png": "d49a5f368868138ea6680673d59af7abbc6fdfa04871c595951f486cefaf2ccc689eeebd958a51e70c069a7a2165e337b25d3c86d55bdd9775af893821a1ece7",
17
+        "img\/sip_trip_phone_screenshot.png": "1fa28900744a60ef8c4ccc2d3f9dfca5d201d2b78d572c8fcc284a345331c6b3f048bfdb2da76bde250084d45d2b5dceefbb38e2d0af0aee1e888590aad42a8a",
18
+        "img\/sip_trip_phone_transfer_call.png": "88203206955cb1015fda3b6f50684dee73f8bfa393cfab0e60e4225cff6d042ed5a7ad5785f79e3ad16e0c7da353b91293fec239f1a2e299dee3531d8923c01e",
19
+        "js\/launchphone.js": "f065e7ef10ca92307a5bcba0ba755177d72e7250d67b2d60cfd48d6ba41bce1776b0d245d8e204e7fa914f5851d0d05c2ae2febc53e069f08807ce88d7c061e1",
20
+        "js\/settings.js": "df0f0cbac055e2d36f0714e42d5c5105b14ee2ae3017a02e3974edf92d37c23fd648677e7b2b4e86c1366f93c26cfd0485fd39db26213b6ca7f4bd823e114dee",
21
+        "l10n\/en_GB.js": "6e7933b366c871d7c9d85379a9407559bdb597a77b6946a12d18a8d236d51c981be3d918bd3126bfef10c54d62700bb945bd8bc538e83d0675441c67fe1e5f27",
22
+        "l10n\/en_GB.json": "a2930846ee26667e990043904d315b5b05c464e62a8fac91699ecd8de90c6bed660558ab59664fe8768a6fcd33ab84e3028ddb326d2c20e5ce44d7a636b4b52e",
23
+        "lib\/AppConfig.php": "e0279b17c389a2ba883c07800f43326efc427d96dd6d4e123e14b0bcd4dd4dcc521af3c2fa1673c7fe68ee915a34222dead68f266ca34db1c864216c24134c39",
24
+        "lib\/AppInfo\/Application.php": "a80c8968ac1af43642ca5131a3119be96fc85f222094f8b8ec638f752b5db75296472a71ffba716eabbb9bb2a0054fd984ff1ae53cc72ba0761ecb64eb8f84cf",
25
+        "lib\/Controller\/PageController.php": "0d32eed8d4cf98d33a7501a5aa7cb8a5921d3a8a98bed952ed9c18d26b154286de383a6d447d998be985848d9fbdc10fdaecb30dd01e3ecd463e75291a5f9418",
26
+        "lib\/Controller\/SphoneController.php": "67ad9ad9c9d7471ddda8d99ec86ced02ea2f8fbef52827bcb1d9c8449980517b9f6e6d6572945adfdc2bf5d4e5a2e806e9c24731344f908b2168f02aab9b76e4",
27
+        "lib\/Migration\/Version100Date20211106173528.php": "531cd0d519b3b1b16b5205f981fead2b2d6e4516079b878ad6cfa6b1d8bfcbdbc181050335b4c41c3a23057342c8205823898900357e789711aa2e76aab20e9f",
28
+        "lib\/Service\/SphoneService.php": "af6b6e000283b1984375da4da2785da728eb894bc312f585c51fafc692cd2cbf5f1edbbda3dbbce8a5feaec8e19c67f8236c2264dc727a55534699d5d8bf1896",
29
+        "lib\/Settings\/Personal.php": "d34316bb0ae9afc9572f946d0b4da2d834808ad124b84f6314f11e52ce8a823111244f515bc0433beb35708529d27495c1e926a3b6743445c43fb15691b7ff3c",
30
+        "lib\/Settings\/PersonalSection.php": "b2104766a5df419eed6811630c2d2de6b817f4b0ca77b5ca018344901cb8db0cefc8c78d4f45b14f4b5129aa986ae583b69c78d50cd91f8502508dd8724d3edb",
31
+        "phone\/css\/bootstrap.min.css": "b82d1fb15e8eec863133d7491103e86bb1cb67442509bd141f2c2730dc237c351d3a10bd4e9633ea208c39a98b6a508769c7c448aed809bee43a83e10361c402",
32
+        "phone\/css\/ctxSip.css": "27e233d6a7dd3500ff0522662b327c0e77f1df12a16cacaad325749d040cc0753b0d293bcedb5c530baf8cf7dc68042a22719ae03ea1c7be1b86fc415b289168",
33
+        "phone\/css\/ctxSip.less": "9b53e079978d5a672827cadd1b1f9ca63c69af22a77e52fb12318cf445a96ac2f537c797f64f4d2bfd673bd4c1b15d22de9e9ee226add5ca443db36a6fc24905",
34
+        "phone\/css\/font-awesome-4.7.0\/.gitignore": "c3621f6be50311134e6d7a1d34a9638f747f4074c48527dc7975957d6c87b9cb36b64bf8385fb1a59b52a281f1e72ac3f1c268dba6d09ac951e0f4618bded3d8",
35
+        "phone\/css\/font-awesome-4.7.0\/.npmignore": "6de3301556255638c616eab313a3d8ee5c704b1aa5b57a5d85e5723cb3b810a1ebcc148c33dde5c4989a691f18f8a2ace97c40df2e9c4306b840a4823587ee2e",
36
+        "phone\/css\/font-awesome-4.7.0\/CONTRIBUTING.md": "4576f4a2b8070a422891412d123025245fc3ae5511de09e153a1924aafa5d8d8de65fc530db79426055e21996ee9ef1bef22a192f46cca3bb94894d0d54d6ecf",
37
+        "phone\/css\/font-awesome-4.7.0\/Gemfile": "2add4715a7f520d0bbce11062202f6d1072efe569207c801f9ded213e8d3b2d0f879071c39aa117839e5e3a73780b1081e18dbec2ac79b6b4756deb4a8a4186a",
38
+        "phone\/css\/font-awesome-4.7.0\/Gemfile.lock": "1daf45ff9728c007cec63dbafeafc394322273e3620f911769b230de8408b71838429c86f45324885db7029cb4661a5dd6057e3e6961a98ee08d87e7601b85ab",
39
+        "phone\/css\/font-awesome-4.7.0\/HELP-US-OUT.txt": "f0ebc1e7ec38a8cd333b34e2deebb416ffab31f3cd707f27e310beff328e5e05962a023da606c62559c8b606f7138b90896ee304fd45e86afdd2910ac8cdda57",
40
+        "phone\/css\/font-awesome-4.7.0\/LICENSE": "1a7a0986aaed249087bd3a01cbda0361cddecd4ac0e4da9d7095f6193b4dccc559d570789b0a4ca2606f2ef137f2c4174cef735a8535371ce7e3a55625dfa801",
41
+        "phone\/css\/font-awesome-4.7.0\/README.md": "34655fd4be9d98ed1d419c98372cbfa58684382fda11936fbda3f6b39894cbe9fe429b6ec3346315cca309c2d07648064d0554d1e241c6ef9df57e6fcf758ca1",
42
+        "phone\/css\/font-awesome-4.7.0\/_config.yml": "883821543b8f3d2ea37e88186afe841c085fedb3b7ccaea49757af224b0dac02ac9eb5b8d7ce1648cb57fff434936313315c308ba624941f5f5c0b1fce083d64",
43
+        "phone\/css\/font-awesome-4.7.0\/bower.json": "5407ebc1f339b0ccc665e1fe5edc8c92bce01fcd0f5c3be302f407bec80a315a0612ffb2b71a93bd0e19a1fc1eb34095a02bf0aec659b08411fcffa3d289b7e2",
44
+        "phone\/css\/font-awesome-4.7.0\/component.json": "12fcbaa3f72f707f433aaa532774497453d447e3402f4afb1c27e8ea9b3cf98108229292af312aa434722e9b50b2da115b2392b82f41b19144d6dd2ea183d659",
45
+        "phone\/css\/font-awesome-4.7.0\/composer.json": "566b0aa11e55c98698c1f23b92bd05cd583c5448a3c4a33582f05a19325e26b91f82138822d0ea2b1397491add3e4b79d2682acc7dad6beab24fd1621c3d27fb",
46
+        "phone\/css\/font-awesome-4.7.0\/css\/font-awesome.css": "e40f27c1d30e5ab4b3db47c3b2373381489d50147c9623d853e5b299364fd65998f46e8e73b1e566fd79e97aa7b20354cd3c8c79f15372c147fed9c913ffb106",
47
+        "phone\/css\/font-awesome-4.7.0\/css\/font-awesome.css.map": "fc6df90f77e3ab265e3f19c2d6ccc27c49d5ab94cb956a2de3e16edfb3f59a3e1f9df3182474925704412ea056bc0acfd70f8f599c9fabefb48b43355a1e29cc",
48
+        "phone\/css\/font-awesome-4.7.0\/css\/font-awesome.min.css": "49f4e24e55fa924faa8ad7debe5ffb2e26d439e25696df6b6f20e7f766b50ea58ec3dbd61b6305a1acacd2c80e6e659accee4140f885b9c9e71008e9001fbf4b",
49
+        "phone\/css\/font-awesome-4.7.0\/fonts\/FontAwesome.otf": "a3acaaac3a9861ac7a4ba23e52b9115d39b674cb685b45454fb4b80329a4f7370b5ea7dd8b41d630798f8a54082b62411fd63332752296dbf5f2b3b96abb8874",
50
+        "phone\/css\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.eot": "c160d3d77e67eff986043461693b2a831e1175f579490d7f0b411005ea81bd4f5850ff534f6721b727c002973f3f9027ea960fac4317d37db1d4cb53ec9d343a",
51
+        "phone\/css\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.svg": "4f575d52331de91a2e32cc3408dd0eaf0cf25b7244d34b226314e3647e85ce284f86e3b7238c6c8b9022dc4e2787bf51620849290cdcd5d4c4bc905f289d2156",
52
+        "phone\/css\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.ttf": "9ffb91e68c975172848b4bba25284678cc2c6eb4fb2d42000aa871c36656c4cebc28bf83c94df9afdfbf2407c01fe6b554c660b9b5c11af27c35acadfe6136ac",
53
+        "phone\/css\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.woff": "9c776dea55a01fd854ea23b3463d9ac716077d406ecbe8ed0c9b6120ff7e60357f0521ab3e3bf9d4e17ca2c44a5d63ee58a4e7a37a3d3f26415a98d11c99e04f",
54
+        "phone\/css\/font-awesome-4.7.0\/fonts\/fontawesome-webfont.woff2": "838fefdbc14901f41edf995a78fdac55764cd4912ccb734b8bea4909194582904d8f2afdf2b6c428667912ce4d65681a1044d045d1bc6de2b14113f0315fc892",
55
+        "phone\/css\/font-awesome-4.7.0\/less\/animated.less": "285de8b339ae691c8c95230462b8760949850ecbd1a4f8b98b0f85347f1187ca7727507a50ba7ee362b57b1ccc94efe57fa99bb501bbea93561ca3104f73084c",
56
+        "phone\/css\/font-awesome-4.7.0\/less\/bordered-pulled.less": "666a33697b525aa25d773c94360b96dd6ff833dedf99178af931b040aa93239c5814bfdd433a841d77c2a3addcc444d7ec95c83073b9d30e48ed5fff4e82a111",
57
+        "phone\/css\/font-awesome-4.7.0\/less\/core.less": "88b310200bdd13129f343e8f9b581e3a376fd5aec4c7a604815101774d31ca3fb469d345321aee80303842309b10273885195545f69fb81ea13215e751ef5187",
58
+        "phone\/css\/font-awesome-4.7.0\/less\/fixed-width.less": "b7bf0de65815043012e95e8b1bac895e85c9a07c047c99ba4f5c132a00ace5aeb3e838f2aac26d8451b38d193fde8199c45d58a2a79931e5bdbda47f15c8822d",
59
+        "phone\/css\/font-awesome-4.7.0\/less\/font-awesome.less": "f5cf809023468a015234142efd754543054f9fabcf06ecb58db792537b8526c5d73098cb059e6e37ddf295895e92ace9005e9c4e5eaab19d33f06ac478c69acf",
60
+        "phone\/css\/font-awesome-4.7.0\/less\/icons.less": "8735bbdc8c7c9d082c2a1f261c74bed575fa096ba8775ad48ada6894f03a8319414db099395e80f16f6e89d802c988c1a2bbf73252c65acb040c35d40b9ed0f5",
61
+        "phone\/css\/font-awesome-4.7.0\/less\/larger.less": "5ba01d3b3c917dfcc0bf20a283397e677d420addb83c74d29f81d77658105c8d9e48784d2e8f5214919877141056a74f06d3081fa291269f92c4506ac089a745",
62
+        "phone\/css\/font-awesome-4.7.0\/less\/list.less": "a13c48c3ab87469b5e720287f5f1720f0588bb45a0700968879cbba7ba008d070cdcd69b41d374cb504311c0a20bc4e727872855ae5e90fc76b1589104acc07f",
63
+        "phone\/css\/font-awesome-4.7.0\/less\/mixins.less": "9fba58dc30953169340a57fcda1b3dcccbe69cb9ee5ad3e29e53719fb185f4b49f9571be248675d5cf5d82f86482086df022283b31b1766090f9954755f7a47f",
64
+        "phone\/css\/font-awesome-4.7.0\/less\/path.less": "2214dadd8025d0da912ee4e0366a25b6d521f61ad04cd61c0b13140a9465d7711db8a80e3c83bc5410624eeef8bb2dbd1aba48cc3fa39b75d5eb5e91afbb7ba7",
65
+        "phone\/css\/font-awesome-4.7.0\/less\/rotated-flipped.less": "a906cde529bac0abc118201866c6e81ceed53ea5859795ebe87e52e1d04f1c32b0ae1dc2a9297e2d6a2cc44a7bbfcdccd01ead571198027430b98190ce5efa67",
66
+        "phone\/css\/font-awesome-4.7.0\/less\/screen-reader.less": "7d5c0d28b78b9c24b6af0181f8bf72d1b7bf20c45edbf1594da8b4c8391dd24920b9d0ad186ada7217755cbbabb9bf6ea52acd8ed39f7c9abf4659339eb70504",
67
+        "phone\/css\/font-awesome-4.7.0\/less\/stacked.less": "0f07e1507d430c8ade9cbf2460c8148d69fdce6b5b7c659247953e0e0235c5128cec1cd1a329790b9bfa42967cbafd36776d81f6e4ff80520149f8ff4a6ba629",
68
+        "phone\/css\/font-awesome-4.7.0\/less\/variables.less": "1691b468571a87081a892621941b3f0f954a3c5a4c588811b329e092bae28a8946f4e0ed5c440c7bd4248d3aa31c3be26867d28771703cbca41cedf5f3f3fc72",
69
+        "phone\/css\/font-awesome-4.7.0\/package.json": "e66e530ac7b2d050bf954b40ea6af7c20296e7613dae6028c76a12dc6e0ddc92cc89dc565ccfac27d529c7c4f2aa938b52cf3c7a5ca04c86ab6c52fcb9d9c2e3",
70
+        "phone\/css\/font-awesome-4.7.0\/scss\/_animated.scss": "5d8be64ce5136d02dcc2dc38341491c2cafca5633a8bbcf6bc6931da2ec95e2e29ffddd8a058842da4764620824914f7c7c7048a6c9e54d3e97bd7ab995834f5",
71
+        "phone\/css\/font-awesome-4.7.0\/scss\/_bordered-pulled.scss": "01095953afd37d399f8715168a67a2e60c23623f3ead4eb4360f8800e30cb9572ee5d90b48ab4d0e07271f75b11da2d4a4cc39115a872e2f001000cfb46a8bea",
72
+        "phone\/css\/font-awesome-4.7.0\/scss\/_core.scss": "78b807ddc8ac17eebfd4f59eb923a7f8bac8e7b76bc83985d593382b1964f1d98539af83c95c4aaf99e3e492304e08d452980879213fc13d9b9f69539f1f74c6",
73
+        "phone\/css\/font-awesome-4.7.0\/scss\/_fixed-width.scss": "27392694f9bd1a671cd21517721a86c24725c51fcad4acaf09cb75a9e36bea34176af900c82e061eb0ee6b60a1bd0d9e99213119c5175c2f48b6800258ba840d",
74
+        "phone\/css\/font-awesome-4.7.0\/scss\/_icons.scss": "b7f5aa12eb8cab73fd506d499f9c871b54d5939058b9ac27b858499f051d9af74a6374b2bc32eb2aecc169f9c2332cb2abd6b56b150d864df1d19ae153f16301",
75
+        "phone\/css\/font-awesome-4.7.0\/scss\/_larger.scss": "ed6e63e7cdc9bae34810146c3dfd52b912f7b20219555994249f6f3dbd528673af58b69deecd9819f28f71713076c6694f6db0e31148e8e726f714312f404a73",
76
+        "phone\/css\/font-awesome-4.7.0\/scss\/_list.scss": "d8b110a513c41ba8a00620143aa01b2bca59f21306b64e96cb82e4739ea88beddc0d3ba2679f277a34c89fa5cfa3d4b0f8ac5b16d9beccccae36b2f8450ef75b",
77
+        "phone\/css\/font-awesome-4.7.0\/scss\/_mixins.scss": "da84a310d9322e8a4b5e0c739e93a5c66418930930eed7e4a14351b61aa6073465302552642c75553819fe2ea7903ece21b20494761a94daada05bd6fb2e48fe",
78
+        "phone\/css\/font-awesome-4.7.0\/scss\/_path.scss": "9eaa7d29bb402c790bf1ad40ee849e26743d198bff3cfce0182c2320afd9d47f4377b2bfb147999a057604dcfed33e408065577a516be0f3623fc0df75120912",
79
+        "phone\/css\/font-awesome-4.7.0\/scss\/_rotated-flipped.scss": "89a2a4009628540c88c9375c7f04bade6bb9b901575c12fe22d0031c10011f4c5c3b7834d4caf6b1cfb84501a5a77d5c4e6cebc9a8ff92c8bc6c82ec6bfed40f",
80
+        "phone\/css\/font-awesome-4.7.0\/scss\/_screen-reader.scss": "5e3c8df5f64a9ddd9c7dad6f939156090e832a43c4352f7f470169ba22133267931f53100da2a4f4ec5e5528734c5d60c42ebc64fae6a5ee1dbc2e920dc343c9",
81
+        "phone\/css\/font-awesome-4.7.0\/scss\/_stacked.scss": "25492b5ff68a6d2c8f9ddcebbea75b1f14a7f47d599bea5d75e1f5fabdb5e3d43147e6df2c435c7ea639c094811872e53941ccb79f204026b6fe2cae172df7ac",
82
+        "phone\/css\/font-awesome-4.7.0\/scss\/_variables.scss": "77079c62eb1459ecc6e763e863f02f5faf9289b333cb43b2402bbf822837dba4d6af22d97fcdac68e252cba9758a91386483733ccf690c3d4eb5f1d109794f29",
83
+        "phone\/css\/font-awesome-4.7.0\/scss\/font-awesome.scss": "e5cd637954db11cc3e86af92ec127847c7476c22dd1e165c56a2816733368f02edff7fb54679ca77574f8fd86778528b6ff51ae0a39701e09b310a84b877580a",
84
+        "phone\/css\/font-awesome-4.7.0\/src\/CNAME": "060fe8853f4156b0fc81b945c6a3c98f0259e9a32adf02967a1c03e76bfd3bbb918364d208a411ab86299fc0719034750956f8fcc98286bcc3cdcb65314474a8",
85
+        "phone\/css\/font-awesome-4.7.0\/src\/Makefile": "88682614a1f8b34219819161e3fe03f8ee575afc05d0a883ab78cd8a772a7e6fbdc13ba4e4bb4a9d2f98e32772ddd2958e072b817e9ba195ee66c68087225eba",
86
+        "phone\/css\/font-awesome-4.7.0\/src\/README.md-nobuild": "05eade6bc17a7ab940d65e656c1f4d88656e15137ce90a64b3220c1b74cac41d27cd1764c63a6bcd5d8c43a17aced01d782ff4b714f559d18378c78a518182aa",
87
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/accessibility\/accessibility-facdn.html": "feff45586c2e4dec12c1d766b7a8cc815174a56b37567da96d62c04e15c072c902c70713b6f06fce9cc1eb2b4bf0fe44f2dd7b3b630e6cb3006e98e819cd54e2",
88
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/accessibility\/accessibility-manual.html": "c521d6c66a661530f5368c9cd7d191caa9cb791060f678cd44b79201196ce86827babc366e28a5cb311d9ec8929354354da0f3a04d3ac9e370441933bf57615b",
89
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/accessibility\/background.html": "12ef24dab463fd60c8dba5799f069785be108dd5666bccc3ad551af680d7ed3f1ba5c87feb0a10e52efc415ac5cd9fc89bd314f26552e844b2441a61b6ab2de6",
90
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/accessibility\/cta-cdn-ally.html": "d2cb6cec928638e10ad2aa93b7ea55b2184b9504edcca4e87ab20ebdca610a6edc45ee2360abdfb25956df207949cfd94d78206fb5eeba39c2d8fd9d1410952b",
91
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/accessibility\/other.html": "b6ea9fd4eb72fe8b20f18449ca22c65eb72399c8b5c956b598401d95086a37e885883064a06e58a35f2fbb69a296c069f8ab2d3b033e2148e4663cf08542184f",
92
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/ads\/carbon.html": "d6336f7613a75db891904471980c15e3b6d81ad014e13d6317eca29c7b5103166385e8959d3702e747ff83560e97920801d6a246772c617abc7811086a283aa2",
93
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/brand-adblock-warning.html": "5477ecda666bdd618d7e68af4539187ee932dd29418699c0c0e69548b47d20ea98d289a9e3b691696891caa1a9095ab8252ed11425964d8db9df34641d44d62c",
94
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/brand-license.html": "739eb68b48f8d4f555e02f7ef9ab1801aebf6cfad50325d20c63c9068dfca73d0dd27eb6ec4f4e96cb5224da8d8b8fceda4df088411d1022cdbde272e3ae03ff",
95
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/code\/core.less": "4452c88a8b284dd090873896e0b46b86846f2a23dfc90fe69ae561404bc1417e085c6546ae99827196feaec49bfda147f2810359a1b692071ed2db64eb1561c6",
96
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/code\/core.scss": "125638298cf58ddec200c8c58466fb568fcf76e3255f64737b59f9aab1ffc1c64a5f52082d3de4f80e88d25f3e34472107aa66c4bbd55e823df465db7e768ac4",
97
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/code\/license.css": "4a92760c82226b27a683a3860fcddda105d657ed7282221e5008bd8e80b299cbee5387e45e86e18988291870f1ea980ff5733cf36676bf46fd633f92ddf6e638",
98
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/community\/getting-support.html": "fd3d2680d3ad916cedf632dcd2da0addd756fe939dd400c67168090dd6aa97ed067fd3ba4d4ab8919507a45040ff0a93899617542184691b812a899c84123b6a",
99
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/community\/project-milestones.html": "5ba81ec08a037967dbb218e04057f1cc9b03fd79d02b3baae67a07dda595727b8409749340949b4001409543a8fa184603eb788417353b22d8cfb24eb014b01a",
100
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/community\/reporting-bugs.html": "f6582dee7f90225b0047b480dfaa35362477740b29215366227f27d53ed2c43005c4d2b60dabec41b33a482d516f5a23c2b229408fc21b97063db704d96ad098",
101
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/community\/requesting-new-icons.html": "479e29dd3f3dd17083e8ac7320c1a3de111d69cc1db7f618c0003a494b89d0e744c718f70cdd41300a165bc5e0fb6b9758e8fd82564ae47406e6cd104d9b9b04",
102
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/community\/submitting-pull-requests.html": "d62ea8e1f09ef35627c9d4d0498ff514fb1c88ca4215ab72194fcc3a90aa7a4ada5d202399de9aca41f01a20e9dd674c254797f94a6a3b8380b2df1af463d9f5",
103
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/accessible.html": "26fcba6f7236ecb034ed5575f02e7e7872878abee5d51444d06e8d976a80faaf017e9bd4aa43f2bc314759e5564c3030ee655ff8062d8aa551ec57060aae6cff",
104
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/animated.html": "8d8c90d6dea5ac1e869fc1f6234db28f6aefc7b489f774ef8abe64bedd7e82c5ed6efec2d4a85b9ac0152f50273695a2f8688aab3d904a130f001d2ba1704a21",
105
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/basic.html": "f5ab39675edf6375e893509f3cdc6721c50cc721229d2cd0bcb2437eddc644e02b9d1e714dc1c2d34e6675501e3c7b0469e454455d40c5a8e7aa1e83ae54d873",
106
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/bootstrap.html": "611cb46b313ed9d3412cfe9279981937a6695268392a88cca6e4252fb84b7f9c63e244d70b650abc8e73fd4648254e04995a79c9f68a695e7b8373bdd2ea6786",
107
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/bordered-pulled.html": "d97b2d4ca375122587565da7ad6a89cc761c1a01648140f6b003903280af01dd29ef23ea565849a62d892b9dd547a517a8028e2cd63a25fde89417b4476a049f",
108
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/custom.html": "09e01e23c1941ffe88d5c047285621f41452ce960686f00b3415ffff482d41748f6729f734a44639acfb0e1a6f47bf6931e707cde1cbb059de6b9c4c8e0cecda",
109
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/fixed-width.html": "fdc321a99a9570b65f3330f1e743e2a5a24f07d8759f45b811b00d2765aa7626e8c48fc316b5c040a4d847469c13873981d1098a378123632d288c787c9d74f1",
110
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/larger.html": "d9d38540bed78cc038323acd638d96c764cb18765ce328f4fcea4282cf432013e7a15482a56db3be50a9a1150743d078d891fd01cc5945d48952547974338af5",
111
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/list.html": "43ac890e702de4ee53d71a3f4ed18b66b5633e15ed8ece1f4039d1c3377a1d391051fb00b037f2e4a1f1c757d6cf615f069efe615b88aac1be4ee923b8b1d425",
112
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/rotated-flipped.html": "9c4eb8ca3cdb2309f87ee0366a75631a6a311700091f4c8189d74bbc4a33e3003635ebccc8c9aaf0d0960284c088f490e61c2a51e79cfbac4a72cc2609f90880",
113
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/examples\/stacked.html": "9bce1d2abd759645aac7c2f0fd54e55a34a2668882e337d89c8ee0bdea14bf790c0c03adc7f6ecc6d8e1cf13deabb8f9c90f0cbe4d44a867fae42f72d5a83711",
114
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/footer.html": "00b38469e9dfbc25d4905c9e71965064f1dd11d868bf0983de1614f870309e2313fea222e4ed4206a71c07924cc45bf28f8c0fd6428d331a58df566cd6988b54",
115
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/accessibility.html": "9b99cab0babf09aa30dd81d6bd675e43b7e8cba79e785d0dca3b7529dae910c2a96eb2c37a97e98610e2d9c5c2bcd84f85cdcf6ec22b72a81fa377edd529ca41",
116
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/brand.html": "fdcf75c126f165963c273c164f14cb933760ed977d1b734e4843d4299ced9dff545bce672409818ab2dc8391fffee391e17d1a56c80d52b39bb92df8679139db",
117
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/chart.html": "5d11f2d8367ee116fd85495a80a918d0bff70f641dfc4d7e6fed17e7e15496c04079bc8753b092fc3b50a19b5eff67c2790f7be8f49228a729bf4eddcfc892a1",
118
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/currency.html": "66b4d159ad39c6c0a96ccddccfec84e1b12f654e5880464042378f3439ce8df3257a33ee1df55252fc214428b52685a425ba91792c52f28984436912bea6ad21",
119
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/directional.html": "281f9c2e899998fee66e3d5aa1481451d23a2c2964e962506b04190cb84acdcf5e12e55d7a02e0a59793fbfdb78a5bd95203ac560441867ea49ae26c971d4060",
120
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/file-type.html": "9db9fd23e94d311b5d6b9258b5efea167037f6fd9ae54c57e8cc6505cd92bb14edded5dfe614dd27327200832268d56084f3060e18f29066bf99c141ef20c109",
121
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/form-control.html": "4a14aa9f08004d97cd7ef070c0e0423734bf71d1607bcd9d27f66f148876a3eeb355966e78207dad0e3da8ac1589df4bc6e1c6da661c2d1ae9c85d34fc77b254",
122
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/gender.html": "76950be4360b1eb448c6a41cf6adf739f74b3c60254b3264356e3b71bcaf791dc048915adf8e1730b819316fdb5cf934446a121d5d5461a743e03b7e54103586",
123
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/hand.html": "2ffce735b462f5b5c117c639f22be1a83de099589ffaf378355c448cb748d9a051280524c30224f7796bd317b74f201451765c5b37125440dc4db6aed420d8c6",
124
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/medical.html": "171a709bfe146dd5ca49647b9acf81ebcf62ef0a27d6e1aa8859c3a00b25f05b867712df7bba53e2e87e33b46dbc0eae107b2e1f3de4eb5b82d7e8fc8443d818",
125
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/new.html": "7d292287112e46c450034b08d51f4c1435782331e6049ec2fb5579ed9c56ccd6ed4c06b9f33b503a1d5e09160bc4c766df53eef6c1c0f90f95f2e7deefc9a628",
126
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/payment.html": "d8169b40692ac8fa117ce16eb7f1f6bb1b6f39eeac5a4f6c1aefad2b5278f1cdaf773907ada1bc87953fac97b9874511eb1d163462491c95eb9dbbb7a27e113d",
127
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/spinner.html": "2049127b24cc76076489d861ebad12207abf87c7b015ddadca72e66ae11a28068bd0d1cc9d28b245f236cbd72e0def6e90486cc1fd14c61442c57052a97cc956",
128
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/text-editor.html": "d4a659a0d14329a5a21c2369c3d3bb3bed12c88b19b18aaaabc61c095245885ecd39db439d454de3b4f15e3ad4764b909e240e38df28ee3eb25fa92240bd8038",
129
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/transportation.html": "4eb63448d28f9f6e13c3bfdadbec3b30f6985b17e3831d48e0ad15b3b1a6c41bb547bdb009b741d149f857cc191dae8f382b550aa6c8b8bad0a3c5088ba2581e",
130
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/video-player.html": "4f3aa37ee53df679d1baaf01d803bbe1346313ff5c6d2932a34993afa0294f23b9b29cb8a3876bd94e7be14469b6f3f04d52393260b32e790ffce2ae38de3a41",
131
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/icons\/web-application.html": "c430a80b58d49eefecf12236366f629d3091ba3d558a510d68a7ff7d5e4eb2d55d55c7fd781ec0e14422c7ae16775c6c90ef18f7059991b2285aa94e6630dddd",
132
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/jumbotron-carousel.html": "a9af25e69e6e61a582917c86e34728a8205fce95f94e4ff9fca4a27af05b68750609b2a4e13fa8f728b71bdead30c182055f2a1d329e6cd679d6110fe674e7b3",
133
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/jumbotron.html": "a9663212f87ba8e79d819fb4f896d0a8f53ab8ce57958a7c20e9587d03fdf499878f0121b7125a0bea012d21966bffd8cba3b0dd80ea4872bc590ee8aff9f5a9",
134
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/modals\/download.html": "df2bc4bffe3ee6f3286b7925594b23bee5775cd933b5b102328676b0d9a0e052387aca2d9495f7748bc2a7b626d5e5c08ffa338c2d5766620e0631fd202572a7",
135
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/modals\/fa5.html": "cd55e54afc79886bcc57f7cbaf0f100fcc41c26bb6a8a9c8a072ebec5d0c4c8feec90ea6e0e615e2fc6fc046c3b0dbdbfe66b31d3f9e1e08783e72e81b8c637d",
136
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/navbar.html": "9e8779299c2d4d95380ad8fa355ba826043009d1a4cdb735e376cdf38afb89c553a9c436680b717c312a4cc0e25a6f9cceb9034c6a97495943788ffcba92633a",
137
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/new-features.html": "b4c23f579f8fc506c8f6848a609c1a0c1c06c82deddb2f38b5b9a770e4d8df793d0cbe803b52287f01d3d46c6a143e106ee31cb32b8e985841ca5e4e16b20d5d",
138
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/new-naming.html": "4b0e5128293de9fde103c9a8648b67ef1d261c9eee359fc019083675ee38f66d45756dcd26b41efb034ca819f5c9be532c8b0d2fa1efaa174958c961818030e3",
139
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/new-upgrading.html": "a09270d8ed206b1a3a9b2415190148fbc1bbdda637fa032e7d17e0108c7e4ce4bbde2fc06595866029eac5c4904d6ae7b999b57870d6699a4b7ee2924bda80df",
140
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/newsletter-subscribe.html": "9fb09338a1d452dae32c9cdebb4e8800b26b163b46a88942d526e6965a47e33aa2959ff7855940f47d3f46297d5f2b7d4d7b6d3197928c55e5b17e728af5737a",
141
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/camera-retro-tee.html": "2196b9364ee03668eafd98a2274ec10413c1e80772012636d5ecebfd48888ec5df05dfef642d46d971bf46757473a5fbb876ba457797b6196e33d60b784ebe8a",
142
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/classics-tee.html": "a16ac1e4a87939505a43302b9dd94a1766fb6ed91a67c93efba42e38e264aab1f79c5f9150ad66f7029a6ab1811d60bdaaff6977a9c53148b7e393ab053e6224",
143
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/cta-suggestions.html": "af48d657766f7f6163ce4851571750154337c8471059b200896e79f4ac3ccf2af4955ec4b950f1d8974cc6cde7ae11a29017303ccbd1895f30854adaf94d3730",
144
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/fa-ther-tee.html": "095990235b55e0032b7dedb26ea37a20c3c99d431998d81781e80f409a589205028a0f786cc19dd6b479b2e2738bc0744f41ca7471ea5889f294a137e7100e45",
145
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/green-logo-tee.html": "801e093b284cc4f6ce225877fb0ac5611d35a47360248255b13314e9722c96bbc2abb240b55ef5c7b07f931d392b0dca6f7aca7b68c9d722aedea916b12d0a91",
146
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/old-skool-tee.html": "8a754b53ccf0db827e9d1250744b83e937a820876a2c49c969ef8e403b680d2692777d843c11576435cc6a4b2c2ef08a085497709b87b029a3e0827b68d0e269",
147
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/rock-paper-scissors-lizard-spock-tee.html": "5aab5d331fa8f5a3540d42c901a52cc15345b585ea7b271583f9588949bc282defef5da5349ed795b0628825ce239f11481174bcea5a43aee41169959c0985da",
148
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/space-shuttle-tee.html": "b155fc2184abac985df711df2bf1e3907ff088a9ffb648ff3a0dd8c329598722fb3f100f3230184b73f5a4606936e282fa1281f35f7be2a9e3665fbafedfd0a9",
149
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/products\/white-logo-tee.html": "4394a413fb87a5cd25148f5be1fd7e1ef641f6500f68e607f51e13d5f2718c676b4af28b0669cede49dcfd0784ea0004a23c2f803346c5acc00c1fae38e7015f",
150
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/stripe-ad.html": "046fb057775c05ba14c426912de5d1499ab7ac0069ee6b3920279cdb551e2e4bd7c343008606bdd6cd9231e90d3d821085a7cb43fed8871ce687ef42f26d5a33",
151
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/stripe-social.html": "0e73d4df0440bca1dcd3d32a3ffd1cd566a0a04e021b0c9b777e4503de7a4b90b4132d248e6a317093c276011b171669aad65399503b1e475afe593eed4c65d3",
152
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tell-me-thanks.html": "7b4aac2c3b5b1fb29e48575ddaf771e9769bb4bc7e9de53b1e6f1001c26ac8380609e3697af6a687c144edce9e0c56e6f7ae24c961434d6c6f7f7e5f0a8791c1",
153
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tests\/rotated-flipped-inside-anchor.html": "2f385fbca67c27a5700b81c77c8c568536b2f35ed39e5b4baf9b80b4f50c40fae8b44923a2d48ec7cbc78bb4fb3a570533bb3a8a1635ddd6af3d93a5ba58135e",
154
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tests\/rotated-flipped-inside-btn.html": "94101d52e8831e9655f0100a23ae49d9ba861c55726eb5f5f4e21534224fd3b0faf507adc0f4cfdee449a6713a20f5cfbca2c06e9c580702cf64f8bba2f1f9fa",
155
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tests\/rotated-flipped.html": "e773c3bbe0f72df812bf3edfcdb2fbd7469b9c852c06d235f2012cec2d7dedb804d615de3b004e1ece3cddec1136db0580a8f256197c1b07629468ffda1b1940",
156
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tests\/stacked-inside-anchor.html": "59f6a4cd94a0790767d72b0a4f83d1d749667d43bccd60628e271cfb934ad7adba2d8f913c4f55708080aaea6c781b271b09107b56f276c996b49f60a18e911c",
157
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tests\/stacked-with-text.html": "37054624c8aaabc00921b74100c417d1dc43fe9cc46a92ab6e4c17b496d5c952416936093135637f9f01c41b78b73c727a5d921f036bb0491329a42e3fc8e8bb",
158
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/tests\/stacked.html": "644604c9302130434ec413ac9f30532013d3dd3d0ca6f36ab14bdead72ab56386bf3faf46a0993ac2d4ebc46e37b853a3415bfe82dd602b9379e6260574e2323",
159
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/thanks-to.html": "e95ea8282f36803c852620a01d0d8dcd0c8bc217a863db947aedb700f40f2f3e63f3aa64bb32e10cb2c2a4e4e25aa85f65786106555cdd688035be0bf8dfeffd",
160
+        "phone\/css\/font-awesome-4.7.0\/src\/_includes\/why.html": "c8bdd398cd372d29a4221d90003e41ea64851afad508ddc07a285e59abeef7fa708db378de329ee5d43d160593c650e6c79a0771448c435b864256437f665da8",
161
+        "phone\/css\/font-awesome-4.7.0\/src\/_layouts\/base.html": "55c3ac21d5fcfc6af1af7b534ad3dd540d6fd574d2b6f16b4a1412977f7e4aa52f3fec17e01cbd8707bbdbaae250c5d14fe3bf776ba34c58b31105905001a92c",
162
+        "phone\/css\/font-awesome-4.7.0\/src\/_layouts\/icon.html": "d58a89c5f5e459f76b6193976ad8d6fb2790c761344afc1e9714cadcaac4295fa33600060fb719de9ad2d6b4bef445921cbc94e9a7df3163d198cd229b6a673d",
163
+        "phone\/css\/font-awesome-4.7.0\/src\/_layouts\/survey.html": "3cad49f4be12b65f99e525424b4a9da671b1c9e103b0d086f60bd9c0321c58048c83b2e2473bf7fe39ce2a8954293c6769ee23a11511e7ad9498b95c2b4d18d7",
164
+        "phone\/css\/font-awesome-4.7.0\/src\/_plugins\/flatten_icon_filters.rb": "359a2c2e490019fbd73818b7bba512408baa61cb9e3519eb97ac0d6998148e753ef1b9e6efa71bae9f6450399a325385cc7377db998256726845e50d94814d99",
165
+        "phone\/css\/font-awesome-4.7.0\/src\/_plugins\/icon_page_generator.rb": "05e73c7a8787eed87f8d85f6e4c4508d35a853623624fe1addd208172ff8ec5ae7f5e5ee7b546c044f2766843e07d9b9d492f708697f319a3cee839fe6792fcc",
166
+        "phone\/css\/font-awesome-4.7.0\/src\/_plugins\/site.rb": "c7e207a821c852b18991122f2397613a8f9ccfaf511b80235a8a17807498f8090df1203c80311b53558fbad4bb3b251267854701521f8b639f7436403e1f21fb",
167
+        "phone\/css\/font-awesome-4.7.0\/src\/accessibility.html": "e3189df725f9a93f691530e07404bd5f0572121bc8b4f22f94caa724e783be7e1bf7fef39bca4dfa99c640689d6ccd7f379c7750e12e3f6d0422524554ed80ee",
168
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/css\/prettify.css": "6947c12db54c8c2b0900923b14b3a0aa8c15477d9b767bf6c7d401a3ed1b0393ad6f03b7a44a11bd81289fc350608f0fb1cfaf7df80a67ebf7ab37815df7a453",
169
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/css\/pygments.css": "35cb14cd45b94b0190d26a84549156caa20469918569cf3a382bc3b0ec200206e553218af8508c31ade050241c304faca75509741b9fdac87a78876f06a8dad1",
170
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/HELP-US-OUT.txt": "f0ebc1e7ec38a8cd333b34e2deebb416ffab31f3cd707f27e310beff328e5e05962a023da606c62559c8b606f7138b90896ee304fd45e86afdd2910ac8cdda57",
171
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/fonts\/FontAwesome.otf": "a3acaaac3a9861ac7a4ba23e52b9115d39b674cb685b45454fb4b80329a4f7370b5ea7dd8b41d630798f8a54082b62411fd63332752296dbf5f2b3b96abb8874",
172
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/fonts\/fontawesome-webfont.eot": "c160d3d77e67eff986043461693b2a831e1175f579490d7f0b411005ea81bd4f5850ff534f6721b727c002973f3f9027ea960fac4317d37db1d4cb53ec9d343a",
173
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/fonts\/fontawesome-webfont.svg": "4f575d52331de91a2e32cc3408dd0eaf0cf25b7244d34b226314e3647e85ce284f86e3b7238c6c8b9022dc4e2787bf51620849290cdcd5d4c4bc905f289d2156",
174
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/fonts\/fontawesome-webfont.ttf": "9ffb91e68c975172848b4bba25284678cc2c6eb4fb2d42000aa871c36656c4cebc28bf83c94df9afdfbf2407c01fe6b554c660b9b5c11af27c35acadfe6136ac",
175
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/fonts\/fontawesome-webfont.woff": "9c776dea55a01fd854ea23b3463d9ac716077d406ecbe8ed0c9b6120ff7e60357f0521ab3e3bf9d4e17ca2c44a5d63ee58a4e7a37a3d3f26415a98d11c99e04f",
176
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/fonts\/fontawesome-webfont.woff2": "838fefdbc14901f41edf995a78fdac55764cd4912ccb734b8bea4909194582904d8f2afdf2b6c428667912ce4d65681a1044d045d1bc6de2b14113f0315fc892",
177
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/animated.less": "871260979d82ccbfaba0da449a8db5fda5149ab93f6cd4c3b7c7258f4b02519010e4b9488402b3bc1483ffe9b1c28e48371827bcb3815d8bf2c2c9fa2c3457db",
178
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/bordered-pulled.less": "fbc272ec15a506c75aa742979053bd53c137e096b9577dc2c2921ae05da4beef051b5c73d523e788009e7473cacfcf2a3f3be3d756f70533fcdd083c28f06283",
179
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/core.less": "7dc7ebd8db2a4a82608ff2bdac7dcfcc25ceaf328ca3dddc24b4d9288dc1cb0fd9666f049a24e84f49de93a9808bf4558a2c9100b60a18eb6ae8ced3ca1e08ac",
180
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/fixed-width.less": "840595e81ca021f4171407c5671024890d8baabe223d4aea8fdbec4af80506e058a02c007b9a8eab3b22b8a1233da5331645f54d458d0cd85e126fe7ecaf0f72",
181
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/font-awesome.less": "16a2f4f83d9c99c04db5f3a2f8b8f912f2615815d46b4248e93085a0d85b26da4602202e7edafea260cb4effb3966a29f35c5718376787df53b463b671a44358",
182
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/icons.less": "fb4ceabdd56efea26de2ca8b1d36eb5bf9449945597d8a885154bb4826beadd742d7ed7bea85d0045b2212bef5271218202ea13a9752162c58f828874c281c12",
183
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/larger.less": "fc61ace85bfb818341e45d7ae4863fdbf772ca3880f056951a8029fd0c0bd2aa64831cd446ab5f8dad19e4b332732eb5cc0d1f82e07ff28284a270545e7c4fc9",
184
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/list.less": "93822d88bcf9a647867411a47721786bb3404a45dd78b1155b1601dea5327f4cb913248014494101d9aaf5ebc53ca8f7b0d279971199c84d0fcba23af42cb3ac",
185
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/mixins.less": "49774e645ddbdb849361cd519f93ac859896040ab6e282c2ca4b7ee5bc3f0ff9ae33febfb03af13f5c3c70c64da49020d6b38aee87c3cb49bdbfd2997e008a39",
186
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/path.less": "2214dadd8025d0da912ee4e0366a25b6d521f61ad04cd61c0b13140a9465d7711db8a80e3c83bc5410624eeef8bb2dbd1aba48cc3fa39b75d5eb5e91afbb7ba7",
187
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/rotated-flipped.less": "0c410031dd5a13e53659de9933ff7cdd1c474d7aa7a92bf3f0acc635099abe6e09eec47385178ad757e604241d8a0a631c4c44c025f588889ce003844263ba03",
188
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/screen-reader.less": "7d5c0d28b78b9c24b6af0181f8bf72d1b7bf20c45edbf1594da8b4c8391dd24920b9d0ad186ada7217755cbbabb9bf6ea52acd8ed39f7c9abf4659339eb70504",
189
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/stacked.less": "02c86ec39dd5c62d633350a7ea40f08179f45d45ee120f980fba55dd9b3268901bd29d83029889982e180c890d8407f9d8902c0a83d65f9eef8cda449dce9b7f",
190
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/less\/variables.less": "20beb08c4fd41e8ea8c5f83402e381f4cdbf5ada68fe4f55a3b7131e15376da55615d9abca6bc4ebe1c5d592f43bcb68099c4fe8291000dbea7aefad87bd0cf8",
191
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_animated.scss": "0e27405ded612c01c0d1fdb3327dd0e311ad92146ba05099bc7ab26486fa2e1b6705f642078027696eb66b07e05a0c4fe743c24f5ed28c99b62a095c96e1f0ce",
192
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_bordered-pulled.scss": "7e4c565381a5bd3de2c6a7d2d706b592ff23b9634e8aee400aa900abe45b34a6c0a0457661d24c39d2688c0d2464f69cb1c6b38460ad09c0ff22cfad1aa572c7",
193
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_core.scss": "a08d491eb1c351847ff35af3220bb18d3f7bf301c56e34f682fbb81f27612aa26ce32cd9cc491f82b23da16cc2d17e4ebf9afebb2d5c040f8639476e247ef912",
194
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_fixed-width.scss": "63ff8f10bd612ecb27b17775471d3fd2156e23f20ad5949b444a9ce5c7f5c4c4e963579e90f868d4bee6cabc30ac24c8b428a5aa448c6329e85a3082e688d228",
195
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_icons.scss": "bb0c2c272dbd75b0da7e1dab2155a7dddf4e4a15db41f6bba899af8fb0ccb6dbfc715806962c52596e8ff54655a62d12892c05e39cf8d94a32c1b0138798c3f7",
196
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_larger.scss": "56e124c9477776ebbf03a9c1abda1216998d58a901bf6ee377c50f7239fc048a2fa72add0f77c8fd01fe38132250a6ecfb17cb37a415b2b2efe38fd0432822ea",
197
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_list.scss": "cb337c087a7753cffd1298f24f3a6fda676afb4116f2a9bc52182cf0be3b2baf916152a146f808da073de76f8015157f6384c8c8cbbf743fa778729c2155e058",
198
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_mixins.scss": "1a5738e10348256551ce5e24ac2c2999cfb471f59e41c6bad9811fe00cff0d5d91fe3941961ddae0ab799022d1efd55bf771e91ef9198389dbca737c4bf5808a",
199
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_path.scss": "9eaa7d29bb402c790bf1ad40ee849e26743d198bff3cfce0182c2320afd9d47f4377b2bfb147999a057604dcfed33e408065577a516be0f3623fc0df75120912",
200
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_rotated-flipped.scss": "214f7a0b8237f34b8c95efa9dc56ec15b61700987b8e240fa1d97c29aa2f615b87913bb28a6db1dc92ffaf3e80984e4b5f0b602b94f39604fd4613fa5a146411",
201
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_screen-reader.scss": "5e3c8df5f64a9ddd9c7dad6f939156090e832a43c4352f7f470169ba22133267931f53100da2a4f4ec5e5528734c5d60c42ebc64fae6a5ee1dbc2e920dc343c9",
202
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_stacked.scss": "10ea316ec6c669b0d07a17eb585f73da0038a9ed622d3e0bb0751ca5ef61159ce6593c3c53e1e0c589f3dd3ddceb2e9c08215475635611fbda9f8e6f7ba5c7a6",
203
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/_variables.scss": "f036c1d9b7c98d14708c711ee7752db086211c571af722c0e726541fc1429b1cdd1beb747e5e06547aff18f12f2a931e0e78f42e2ecab8f9b70e3fc2a57b9b04",
204
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/font-awesome\/scss\/font-awesome.scss": "0f0dfede40b047e2fbaf5090d3f08a06637444c3f9bdcd8cd2242a8d5df7fcec938e073b1f7c91c334646e2a324d6de12f2673424ce7439d45b99eba020361fd",
205
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/ico\/favicon.ico": "8fb75ec6e7d4290d0f342ab1cbbc4d507326fdcae091b08c25a27be56629ab35d96b999cd06c10aea1db67895dd3b3f74c4359c0e4b1f429503bac3764a76992",
206
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/img\/algolia.png": "d2af6d614e206d73dcce611d448befaa4899b09ecbbbf0a0aa6dde1e268958415ea5fd9a2a87b9b1fc7354fbfb1c1161ebfd7170ec3b95fe4be790408f6c89d9",
207
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/img\/logo-themeisle.png": "ed8dc9ff39b794aed38e9f2cf46993d72e027d1f15f662b3f98eb6e08cdb700f0bfb83fccd4e16cec4be2d0f41b4ff0afcc3776f4a2eddf05fa6fa2b639b9445",
208
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/img\/logo-wpbeginner.png": "9c6ed3015a57e44c0538e52080de6033288689387e12cb648500475c42e2fa736cb027e2ce547d63750fc5ceb3831c3473c656ac3e04fa313aecd399f23e6ebe",
209
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/ZeroClipboard-1.1.7.min.js": "99deba8b85b7aa2c092af1b7a2e09757b1b82b6c9509ddf5af0edd48a10a1a7e790158cb473cb86aa133d79d47142f14e8fc15ff4cf3ce9e39268af6593ebcd9",
210
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/ZeroClipboard-1.1.7.swf": "bb635b563a8b0a637d455127a40bf817ed57c4bfdac1cc07858faef1fcc488c3bd9ad057cba83ec38c7a2cbce0522ab402c4d215303103f6f3227db36716ad34",
211
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/html5shiv.js": "d3915b572fce20ce95c1d5a0bb75f424bf3d6f71e726a77afb50e85c457603d60241cb4698227dd3cf071b7133fe444cf2f0e6728913058731173fbbc9ccaac8",
212
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/monetization.js": "7a8e7b8e79aba68f409fc32188905637e798d79de92305c5907c339ff1c9bee5f22f2d58e499e73316f6bb39db580224299d10560e9e29476f819598b19b5076",
213
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/prettify.min.js": "7162bb9b467682742f6d87ea94300000064fc54e15193c3d7e5a4f898f0ad7dd55bad8f01933eb625ab1a0f4a8191d7062e1acbec6512ee610d2c0c413c0b34a",
214
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/respond.min.js": "a133ec6ca8b11553f9e940bd30faddeeb2465bd5cc9b48f3431670140c1f4d1d74b2362729e1e907e50d6a2411ea58b2027996ff0ee3e5f7a420526f8efda5d4",
215
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/search.js": "1a925281a9fc0721c8b290fd8f6048db5bf31057ba7050228e7245d05fb1fbf6742884355254f00ef1bd68a4542bdaea73375f0eac1f40ae21f280d0d08f37cf",
216
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/js\/site.js": "71e19b41cf03a3b0bf05e1bc0c07a0ed3cff51968470b22502d26357a337cff80179d9e2546082851c07ffafe2427919104253f53c97540f90dc2591662ef9d5",
217
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/.csscomb.json": "7d746f81e37b2a55e4eda116b76f688e057fe1e7a7311dedfacfbc2943dac84b2bda9612140cf7f0089015533d9a00efd90fee5e260a2bd94b7fc73737617368",
218
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/.csslintrc": "238adfbeee24fd202885d332d1316c44bf23a37e1899b9c618215715326a3a0a84112ea18f345203e450d096795ddd7b859a055296f8d2f834b2b0eb7f7d5f3c",
219
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/alerts.less": "6ef653823ef237fa019122796e00afeffe3e6f69773b3282e70595946b936a8055865fc1ef115f371be0c81a4b2abf6243de068d8b75b071fd856aec8ba87d91",
220
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/badges.less": "ca5abfb72cce5fcd7958c53fad833af4e8321595538ee76a4c2eeacd79f217f8465c1b86bca32357daf1d7a82edef5560bb9c69c11d137a1aa1fdb8da16d82b1",
221
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/bootstrap.less": "abcad45a2e54b3b501bb5219bc5883702fb9a15e8a23fb9b3a9c78ad705b99ee39c042972ac756409bd85b45db460572949374c0f0b8eb4885ab4d7529b45e93",
222
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/breadcrumbs.less": "66bc7d8baa9d552aa7bb832fead9ffcde5e9ff1ee9aab436c6599566bd3b87849a74e1a888d7d33bb925016a2dc26d0f046ceaff40bdb06464a550a64f27207b",
223
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/button-groups.less": "b99d1ac30a521fb6163effb388a25114b8f849718bc1a2c32bd4c36423e1b51b1d45b6be181ec0ad39d44debb1475e483456c8fb21d86bb2356addfffd488c96",
224
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/buttons.less": "d2795ba4cd91e07fffe5ba49935b36583c324479ef3d3741330e9267430b0f560f24c059dc1e62c5bcab21084790a87d38dbae051dad3a6e50a403abc7b7ccab",
225
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/carousel.less": "e9f601bb603e0a39d1fd7efd07346cac7d094ae1cbf8d8b95dd2836baf7c25757660a532f1a7d8881c9582234f07b64d57e81ee5e863c901b141b6119696e21d",
226
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/close.less": "e2a6a0877df37b1796039939c179b98f2768291a1c8ccd26fe6848590fc865df9f6f0016c6b5b0d0e7367746ea27c8c9103df4bf5efbac063059e4fdc0db3540",
227
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/code.less": "3932fc44533043a4000c26e4fed51f231c2dc054e561c9d4167a5429799b813d4b28654d9ac411e3a425b66217b090ca72ddc3d5963459fef01fc92386ecf525",
228
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/component-animations.less": "bd7517bccb89a397d29bfb1db20bfbacd1b28d4927330168d8984908c1e7d0f647c0cdcd646f8b009344bc967dc751ccedf0efa872691d23f26e2e3debd6b467",
229
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/dropdowns.less": "bd193d3168a7ec1eb89a484c5e79c37a4ba7d6cfbf5b922bb2e7037b88c3b935fc31a9d9c3c52a92c41b03640a6bb12d61917c2f0128c33c64409e0531ae7ec7",
230
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/forms.less": "c8893acca4ceee40dfb2fbbde9720efdfd8fd5f1e74b0202be26aa3746c27c5e836f7268d9b44466086f5eae106571d4be2d4e04011f85ad45d7ededecf4d73d",
231
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/glyphicons.less": "6f909009f4e9f2b6aad0337c650a3e396b63341ee6c4099baf4537a07256f423dcb969f3f452559b0b3790992cdbbe272d52f4898950b50cf386297d5ac693e8",
232
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/grid.less": "9638e08c198425b7e46b2178f022af3c4566adf6e9cc1ce1386b595fdfcf7a07ee51fa60fa9f3c55f02fd9ae1d2e1198e9534171582b0fea5db0d4288854e215",
233
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/input-groups.less": "c8e470633c05493fc778a64600ffad97737f34a94423217849ce01b77054a8c1d0fdd85350595c7c30bfadf159a8d1ca2d04af9f49c08795e9387020a07a4447",
234
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/jumbotron.less": "e3c97f308f50a5a3914eeceeb9a90dd1a7e802492c2c3da657740c997852ee0271a1dc06fd497ab44625544314c4cdef3bb16cb0bdd5067ca9d89b5cd64a3f17",
235
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/labels.less": "640e8861faf662e06fd4ff06a92382a27319fa39761c78b8a19c4b0ab2b2e440b4ee7cdec8a0f7ce67a12f0596ffdbbd19308e2e9a63d164709ee083edceec64",
236
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/list-group.less": "a11b70ab5618e5ea686893fce866074b51254c93d5bcb02fe30306d143b791e76b3672b7f8fe51545ef30d73ab89732bfc45cf2179dcf9ae07ce38d27389f422",
237
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/media.less": "e8d21a5bc99a08d3d04ee371ded649b3cacd1265988efedbba1e8aaead14d346326c14b64dc6aefa744e232ef6ab46d4ba8a1d23e7aa26b276633db92ab94420",
238
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins.less": "f8a8d51bd105a260e9db963e2e7d636bc91c93c51f117574e199f90cb439daaaa32616356b884527ea48b9feece9724952af7ec1452355703df624c8b498e5a4",
239
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/alerts.less": "582d9fbaf2f8b6b737697824af7ba9e47f98dd4a001b60f1668c2f88aed8bdc3e80311618bad7b07605f81876cbfcbc6830b620bef0ee9fa57fb90898988db79",
240
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/background-variant.less": "68709b0c5b5ba52b0f583b7421f79bfcd32c2784620f0ee8077a0d788ddc38a43b11863cec3b1a183451115f257aa7aeb58d077f066e846639fdd881ad069649",
241
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/border-radius.less": "e495c886182327408e6b82511baa49dcbf1e2b05104f844f3a57fcff40a49eaad548e19ce13853c45e74ac52689d9479792cc3de55a020c2229128f595d5288a",
242
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/buttons.less": "fa6f88171ef22558b095a136769533231a9b0ad8954211f85db3a42ab19492e0d456d5feb419f237bef68d1f75ddc42442154a4007a45b76f17608ec907dcfda",
243
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/center-block.less": "3b81464925a61dbb2be2b11d9be3292e9a3d42c65bc05e52f84b91684e0b178021dbd73e6f613c89f39c34ad311d039bb80332cde9bb64ccc51e0af49e63143a",
244
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/clearfix.less": "5989cda9e86899298c7e7c9cf73004d94d6e53f214dbbad93ca7e7e790d1e2043f768481ba9d20e1b7ff5667fbb4902b213560d09e3a7aa7cf977f55a9247614",
245
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/forms.less": "07dabe53df01d5324803837089f67f74b8e890330859fad42fda090f2f9a35280ddf531cbbc6b549e26002d5afba0e1773cd871c63c7f2f580b67a042f18e403",
246
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/gradients.less": "31b17118826eac8be3aad693382b82d99c01983b68ac37c5290d07920f76f61134c69ee12f9f5ed335aa392e69dd3bcb9a512636142e6acc1827f6db673a5a12",
247
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/grid-framework.less": "ab354cc185f82538cf2532bbe7a7df82dd197a6355bfa3c333164294e329742a800f26641fff2857f7269f80a30cb1fc8635fcf6c7575b7b98603db973d4a314",
248
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/grid.less": "4ef011c62ffaf26988e7f30749a58e251f316ccc3093b1c50d5c65cd66065e2af58bcedbf3447a97f5506df294bb2a31ec0d2ed01c70a977135e153991bb6fc6",
249
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/hide-text.less": "770055fd6a76bf5881015e17101bf9079d8e05188ea70e42ad8a2b8d4d141be3e7756039dd7b904786fc79c8f14ecc58d7c9da4122395d6bb5b9f8766c86e3a8",
250
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/image.less": "a0aa831f323ab27f3fe324453e54382b7e4ed8da5fa72e9819df2b3d07705c800ade9f8e5f732eeb36043096479798a812ef712c589164a629dce7fc9b49f75e",
251
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/labels.less": "3923340ff6b2eee8eda3819d42f4c4b7e6291f9edd2b9807c4548e5bfe47eca3076b62de3c5bf257dd7af4711eb1059f0e342984d2e7a606d2229df2b5678865",
252
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/list-group.less": "be85a41f96cf369a90b27fb5b1fe477306fd9687971fe85bfe8aac3a4ee21c775a9b55d2d0062b66a50e71a11368bf6617ab7962c39b978252c20631b4d55db8",
253
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/nav-divider.less": "89478e72ea248cdf80330b4fc356d0901ce5637e98e07419be49ca8dbd563d894af7fa7fb0e8acc8af4255a9c8a929615a19067e83ff554cb7db5a14ce3aad61",
254
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/nav-vertical-align.less": "2b5ad0e0e292a091f90fd02947db3dab499d47c7e44562005a02b4beee1221baf602687aefe63edd30b6ba2959fe2e94ca9088fdb0e7a548d5c722dd3684710c",
255
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/opacity.less": "39f3e7f370cbfe52d61b08688ed4e0070ad396ed7e2e9bc068d3f10d31cd15e1317664cad0cba13b15e4c60076f1fcc353e28e2b2fcb1fe5f3143ed87ae2cdf2",
256
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/pagination.less": "1344d77a2a54bdad0f7c731114e8ead128335bfab274b36f6ba8c02f6362acbfeb3718452d993f945f78af7f439f1240e4205af3b39e2d12883f9ab127a7866e",
257
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/panels.less": "7518af77aea6fa3fc4d2950ed0d7df5d9fb374f7ffc52333b8e4cd6a785b2dc8b1ffb12cda7e5fc3571bbfbcf7e480af1ea8ceefcea09a6af534949d8622e73c",
258
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/progress-bar.less": "b390e21c7a4fc508ea0c8403dfe7e89d0d7c2e6402cd1a7972f1ac3cdfeb354d6890e3d2c8d214575110162326b0a016055a548ca6d6f0fd146a035eb8896a55",
259
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/reset-filter.less": "1cfef8254d9fcd9d3142c9636270bc505cb7ff3d4e74faf7b3f5c90fd5d7eb4465fdf4affeacda7e7ce40800b8756d3ea2a1031f6729eb975acbba71b3a64b37",
260
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/reset-text.less": "e7a4f4abf9fbf88ac5c756798751d7e0b0ce1390607479a522d3044682a19054a1cdebce3a66a4a2bbbdbaeda9db8d14621f12ae7ae67c4ddaaa1c3f43c9ba75",
261
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/resize.less": "653227d4ef865d5ac4e8f844b72019847c1e06e6d9063bb18dfe91b4316957fec4f01063585275b8cec695b602edce11116320972306bd643cecacc6d80fadd4",
262
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/responsive-visibility.less": "4d75a3404f4f5e8e3364a46ddbe9b9a6c0e780825a71ff4e5ce7c712eef99caeeb47c198df6df4d22479a72ff769247548638bf222f492762fbba383028f3318",
263
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/size.less": "5961852fff078e8f3efb4d2584e60d59d5a74ecc325b53c03d80a63339a86757019d34b28435597ba576a7129bd697f7e974e4a374c772cf3d740f4ec27ec720",
264
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/tab-focus.less": "e277a74a513db05ce8c8bef7a2aa56a2e45b0a6f7e49432eb2c07d9e876a950292be339f6d8937eb0339794f632b6eda5fa29b9ba6e1c037b6dca1f720549f8b",
265
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/table-row.less": "60977b7f339f344350b9c904cfabb9209a1121cb26ea41cf516f01ce3e3f9b5f7e262c298d97f33a8a5f201595f3ad0166d800dd625287deb7d3d416a91093a1",
266
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/text-emphasis.less": "644b7f8385aaad90396707bab15dcd319a71f0a72eea7c0721caf98dfe53825b76973dfcb6ad51ae6cc28d181f4f244074a7ac95c29387231697db7de5af42fc",
267
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/text-overflow.less": "a32baf8bc0d47de27e34ffe09a37702a0faa5e541d06803abecd9b82bf59de1bf0a7ea85ea23a68b84726c984ab0caf62e520b1165b80251c031fdf3060f6c20",
268
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/mixins\/vendor-prefixes.less": "6857da23deb03264fcefc6ca3fefd631571aac71203f23292024f20e0d5bebf4669b5dbcccd36df095460bc9027614396a9f42bcba832e968498d4ac753c76eb",
269
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/modals.less": "4c99c136dbcf3ebe6a95e694ab1bc14a1469f9dca8311390661e5dde3201dcacd855aa9b4400c54d16116a60c98412a06579938fe1c534c7b8643a22d0e6deb4",
270
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/navbar.less": "36d19bb1a44da00094675414d564a1ab382e3fdcfa1eed9e74f5f9ebc0ea5cfbef151996a44de9c9a975d088f409f73fbaaf01887ed0ebb1828810d82fdb3e7b",
271
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/navs.less": "d19df77d08c0bcb9a534533943e2f722a54d26e94cf328849cdd77aed4e1bf067563c0cfd4997f8eaab3dde47fa567025d3283f979d8be5e61c121b784a3d98f",
272
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/normalize.less": "d0a2aafb6b60e57d40747d6b1e36f25011ac250b853eafb50478d4abb1c166aa89edf393a62019081ed19e08b32c6f2fe013edb00090437dd8fa5737379ee718",
273
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/pager.less": "7637659ca2998df19ae2d38304067029b9944db4e70a42c2d0e77ce52cbd0176d765490a890687cbbb24334bf098b4cf54931b35bddc26a85e205b81114dd6a4",
274
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/pagination.less": "365110bafb570d10002748f6d2e743a16a27cadcbe600d64335a1ac09ff690683649872012e3a60bb92a611d87f409b450bc0d9de28d6aa1decae8f70a1a0491",
275
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/panels.less": "d6f37fadce28cf9e90bd1dc47e0bf71b1bd8b67db3e19b0447d2a6a3e13def8cae5d2c52d43aecbfad80fcfcd0b0e24fb5eea205bc6733e10d90b22dde5f275e",
276
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/popovers.less": "084501129f4c74a32eedbd78f6888cd48789e5175987dfcf45385c98a54fbad40654415e6c531a757b1108937ae9c6b9c81404700d754fc54eb925ea4516efac",
277
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/print.less": "9c4f44378fb1cd28535572fd768baf652de2614f31e62753ba79c02a313ab509db28f52c3d0c78665d2384dd7be47edf97e243ef83c6b22e38edec56873aa1ce",
278
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/progress-bars.less": "41c051579d9fb7949b128dda04dedb2ed8adc358b157cf5450d375962323725ee2faa7a4033613471f00544596c8fa400d22d9965c77544aebf6e56b3911cf49",
279
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/responsive-embed.less": "a0288862649916929c2de7a5c982f877847f687422ed205fcb9b6a197ee98a6bf52fd012725f894d951bc6ee4bfdee0a4a8363e652f93b8bb98140aed1995533",
280
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/responsive-utilities.less": "98690e8c90ab2c0c4d9662786b7560f2198a968a4f4ba253b8c87b9402b02c339516c89af569acef3f6f37978ead0a41b234a164f5f16d4828e5bd2b0459f370",
281
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/scaffolding.less": "882fd7d208e76e926ccb9c88ba56741e8baff7b6a46bb17a4c9652778864e63ec04f5113628c6c39c4a94392974293681e560a0e3015226d4c1a66c19e085419",
282
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/tables.less": "8588df750d6291bec4a2359fa6f07658d0a9267b319c47560d61ea909aeef592123fba6aa0ce3cdff19fb92849bc8253f67c98ec5ddeeb782ec73998034c67ec",
283
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/theme.less": "9b0c31e6b9f57bb814edb418813052427ccc97fa23a1ad9c29e1b26f9eb26921948727ed5804cb72d302f53387f4e87aaf8c436e10cdc60c39d3d10a8e89f228",
284
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/thumbnails.less": "000fb95bc0b7210a573f6ae1d336c1baaa78764a9ef5c5054c088b5bd993c4866ee8b5d525c35b0e99d796545389b0a00864c7187222ca23d1d5f395a804a6cf",
285
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/tooltip.less": "76459540fb8f856671ffa6da159ccef956144ec4e38bf73ff2c0f0af40130592d87f7fed1b1b9eda2bfc6e827b4f69dcfbd82a07101b4ec60b8a1e0c3d1c3315",
286
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/type.less": "e2f164468cdf7097e0b3b456bcbae8ba23774c9fa678f2eee698010924f8691a8477de1c259b7e592c5c75f8dc959e7f051a501788b4b7ed4bd73df89a028595",
287
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/utilities.less": "ac3407691078aa6dd779ff6ae1e9cd26abf9913ac18e24188fa31fb3e69b1deb31f7ee8cf8ee7a5fe778d4b0a8a7666faf0d6b30c46257140180a6a6147c2269",
288
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/variables.less": "ae9259421469571038a01a417a1faa001b312ee8a8c16b22022cb169b1ff957a55c0f0d9d31afebb74841f3a23b35c1c41b6c0d66da7a9d16a26e91f7381f0e5",
289
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/bootstrap-3.3.5\/wells.less": "58014e2654e7364b1665d22a62edfa71828822547362fd42ffa3580781b4ca5a5ae6d209ce7916063ebe1f619147c9fc64bddd3b94105635afbdfcf9dea71d9c",
290
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/gandy-grid\/grid.less": "b8bd10ea52b0a8ebac7df606b883a3d9c3cd86d11db93494b822f848f6ff712b04f6155cfed3dbfccbd5676e5cb7ee9f1a965806476f771ba805e9433380b83a",
291
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/gandy-grid\/mixins.less": "201801419a28897fc914d74545fb9653cf133957c675f69fcb12fc1d210017d850821eb2b76e8c3e768639d47089ab647469147646c2e49761f143c7c9800b09",
292
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site.less": "2613c3caeb1d7f65290aca49a2dadaf2a82058e915f81fa1e95d19a8cd2a1065e80af28f870c74048848fea4097f3e4630b06b63c54ea2219ca1527e22053dea",
293
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/algolia.less": "3aeb335ed5081bd89f699218f6a94aa1d1d67e9d0f12608b880fe6ded5948f1172f93c4a3604970eb2e0d57bb88f65b192891e2ad77c6b4ed6d9bc4580d64ddb",
294
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/banner-ad.less": "f5617e2a0610c67953cef2f11f14d969f2acc4d6f19155a3b9386e6da7cf938d1d0cc6d2f437348aa03285683bccea3b1e0e61b644ed4a402a38e85c0cf5e9e9",
295
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/alerts.less": "5bf122c528abe73261e3e5fa571cbef01e133e767c7d59bfcaf5ed88d4747c66b26c8c6f543de14349e5c6ce30a0985cd1ab5439d53bad1036ff29fc35d466c5",
296
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/buttons.less": "e770985ec8cd35b9e3226af40ea32b31540baf07189fb8fb80b9dde4bb6485297afce6e4aae54fea3760ed643a576d8da45b4b76f282edef0487d34f4f1c473a",
297
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/jumbotron.less": "8bd6c1a7619f6eb8e89fff5bad824869909c1650d69b7bfbd6a62388644fc906b74de7d4d826c6ef4fd62fe15db80d4a92ca00261ba1f704e30c494842ebb560",
298
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/labels.less": "33cddb047fd6080281598dbb61960c0c882fd55d116103531413dfa228b2da0ba7a1d74e1a0a784027e2bf196839d44a7ccc0d5bc6d6f9723618c5aff1a90e80",
299
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/modals.less": "e7bd46144060a749a799012ddd68eb40cc2c2591163a5a2daa5814bd3eb4ae9bfa6fea8729a1ef9bd26956a88a069c0e3673555d2cceacc2b486bade7578012e",
300
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/navbar.less": "fa7cce0e8647032bf6f84be86cbb21b51fde5ab235d4c9497ae714c450d29a8bbd072a6e0764b1c9b646d5caa1b5386e4b365a08ac725e687a5a02c5db0af717",
301
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/panels.less": "dbe49fa43779ed116880f620472a17cb0df73f5e1b4ac422727a7efa5f7820d24656ab6702a33ecbf418db70eaab3dbb34c6c52c8856d925532db6027819bb7a",
302
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/tooltip.less": "48416fa9b750f9ab909e6ecc641a3227956361d458ccace89d5c784d3fbe9cd58d2d8e4a1876062fd4217538dd361286b73b72d65fb43b9e8480e74d8ed1c7e4",
303
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/type.less": "387eb060b9fae5bb9d75be7fe4243ce95d8331c6bfcd3da567cdb79c750f8bd8a45d36959d0717323b267a081e7c18ace43df84810008256162ce9158bdca09e",
304
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/variables.less": "2c0810ea534208a0bc6c97f87b61d7788b9fc7f16c63dd30a10759495cfab6b603fa5a1b7b80d3d70897f295065589d9d95d660e8edab05627f0a096996e235b",
305
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bootstrap\/wells.less": "b1e85ac1c8f2b0a3b372d9e3666b00592e299004c7624f8fc27458dfe2cffee3093058b4c9867ac589a48727d5065ced497ae6ae6469636689aa2d2c9b8566a4",
306
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/bsap-ad.less": "17d85c0b18c3de440cd3ee34fd9f88b20bc00630ddef8e753bf6b0e93933efd8e5e8ff3694ff98df19b422596e374cf28e9193eef073b92e62f3407608c44652",
307
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/carbon-ad.less": "c06e5dcc5d97495dcb4acf6eb0dd9eda68ccf311b808e167ec37cae91af8a8b2f963cdbddb8c489c565323447df2f6fd7d62e6d20b8d1fcfc9849316c4eb2758",
308
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/example-rating.less": "3b62779f2d1e1da0e09614e27e43e369cb6860ea3e3f25bb416321d22355484faa7ef06dcaedb3b0ad62cfe76bbf89b8f5bea97c22d7b883e1d048a705f94486",
309
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/fa5.less": "230d28cd06d28dc7a3698a27b400c643663dd239651c29978bc15d3b86797b43b7530b39730af185c33d6c80f96515ff91e56e3da01a066bb85003d88480082f",
310
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/feature-list.less": "5fd9507d3bd6a2a2f3487163ef9168b5db241055b93013555d74fcb2b81ae7866c5011876831f5ade138242a726c39e327ed7c820c760aad4d4f561b52836d45",
311
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/fontawesome-icon-list.less": "be0af7e5d5a793d5587c79e02ee245e659ea1de4b1bf2d187971f6f51b6976c6d07837c79659e77aa6dc52d0a423f6744cefb537a37245ace430bdda7953c846",
312
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/footer.less": "3195eaff0ecc028109d7a79a1b6d6850d7e619253d4a69c69e7470421617d05cab7a7daa95eff1bb6fea458d6848795fa8f56f4089207442b4cc34fd7f926a96",
313
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/jumbotron-carousel.less": "25fc6b59ec1147d0ceac291147773662201799313a4824ea103f7510ea9b328eb9f27ed9768d1128ba655c493355364ab3f95ab4b58b10d7286f17e3b903a5a3",
314
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/layout.less": "caf18d839d6a84d1cd0e13cfb2a2d9e5884ac802429175b4da914d77f896155d3c5e4925f4392044827a8f87e79c0f97876432f95b7125f0f20692e2a08463a7",
315
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/lazy.less": "e00c9dd4e99db9ec174e6b50dc856637cfb57fdb321b72f95a319b5772c6338f7e1f89d109a6bc18ec890c5d275449f87525dbcc272ae3e89de8f4bf4c6611e8",
316
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/newsletter.less": "1e1baa0263cad5613607142776bee6932e57173cdd77cf5a06f79dc104fb479e30fa8f56f6fbec770fd90e5d456d016747960d0943bc01a4d7128a2b336fefb1",
317
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/print.less": "47ce33620e649fe5f9e899daf9b990ed8ff131146fbb8a21b6816f81bb854025bcce74d146d0bc08e345502fae36ff9d16dd879d72aff48712c1f0d2dfd06964",
318
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/responsive\/screen-lg.less": "25b983b0a15d3d09e2c2eae2750bef037ea4cf6bf67b275b40fdb615579143dd6245dd9ff53044c67254f9a84efd05813a8d975992b138149fa7e248c26adab8",
319
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/responsive\/screen-md.less": "4d88734ce346390a74caf1579f78b41908c5b386b38cf4724c84b7c4bbdb1de987520f51ee2e23bbbe8fce2733e220002fcc18cedc790613f0e6c1ea519baaa7",
320
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/responsive\/screen-sm-up.less": "5a059b3ae6b0d1fb6339b5a031f036f64ee7093271c19c45defe57083205152a57e82e75f6e7cf9d95fc5c7e3e20f9db144616034f90c4ea8803b4846d2da348",
321
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/responsive\/screen-sm.less": "b988a2ed6bb237b5c25f7556a3e07b375c9ed33716015de07e4f7b7f787d35186539f05b2d4f752c5a59edfd43e3501d84d865530cdeec3a61320690d060af00",
322
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/responsive\/screen-xs.less": "5266a0dffdf45a7e45efb3fdad70b058f713a4476f7e356096417b139f4d85d36a8cf9c99cbe4840cf5ba4ea438cc9ecc599e39049cc84d853caf7eafe0cc71b",
323
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/search.less": "de316ec445ee08ae2afd58ec4192419daff43fd3be40a77d29eef3e913dd826d633d9eebbb1b82ff38e0b1c62587c04b0ce9725ed1fc89a8cefffbe4a297e44c",
324
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/social-buttons.less": "acd3c69ed3cb1726e4c4707d9ff68bd0bbe928f5ab7a60eff22c7a239214d94ad0d7aeecd7bb1bf3a600ed8e11a44d7631e99c4eea14f3ca986ec38fbbd102ef",
325
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/store.less": "f7b3701892b29f7e84f9e98089f9d902efe6081adeb426a6330ea8bcb646345142b980d2187880f5b88ffce816a92ae990cb72ddc381beee017c4cd386290970",
326
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/stripe-ad.less": "b15f475b64c9f484603631269f41f319251ed78f8d12c0929b77a48c5d427742b56e2ca5d7ae49dfa1e179357535af024c561fe2aea48de23f79ebb6869f84d8",
327
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/sumome.less": "ce6ee2eb2c308a88e56c952e611c726c2cf158109d42918c2e1ef320c45d51269069ba0d50db0d5c443d2d8fa5634f86050794cd2194ff07689b0777a2f63bc7",
328
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/textured-bg.less": "e26572839aef1ebc89da8e1d443c5cda4f52d5e52473af89fdc2d0393b472f16e3e26a705ab8086c730c9215eb9109dcdcd42e6705ac9209989832b559b293fa",
329
+        "phone\/css\/font-awesome-4.7.0\/src\/assets\/less\/site\/views.less": "36c20e316fa6b35959878f3b4a70f3924a0bfd316f34c697a1a3424039fdeb670f976199a01c0896e9158a042eca193674988a4e91d995be289e78ea2ab2fcbb",
330
+        "phone\/css\/font-awesome-4.7.0\/src\/cdn\/error.html": "7e51a097a684678928af7cd5708c2a17222f9cbf81db4a9f85384d28d59031b48ac43315d167ffc0a45097014aea4341416b885d2cf8ccbed6e5bc331767b720",
331
+        "phone\/css\/font-awesome-4.7.0\/src\/cdn\/success.html": "47c4fe2b58da41de009380c016e277dd8beaee35055a3328fb9710dc2e24056ff62f6f9698cf531270c7cea3c96eb84336f201e98aa34d2a37c420d8938ff116",
332
+        "phone\/css\/font-awesome-4.7.0\/src\/cheatsheet.html": "a36cb07fa872f277fac0510ab5d5d640f8d837572c381041cf8623055328e827933b369922dd1c6dc82b7e4bc89d8bdbd19ebd21439a7b95d9b7b43f47d2fb44",
333
+        "phone\/css\/font-awesome-4.7.0\/src\/community.html": "df0bf171b74d07c35d650ed1d786413adae55ec2d74cd779faa2ecfdabf0beaeec77b603a11b9334e31cd74a5458c9100d9336f905b2d50c479fe34c7cf2bcdd",
334
+        "phone\/css\/font-awesome-4.7.0\/src\/design.html": "0df2e8909f5138f50322334a3b5bc65bef0b822cdeab29f8bdba4e077ba0f301a56e8724bfb730e8e6165afe3b761db5c6b6cf8ae2b83e74aac0b0e7563dd999",
335
+        "phone\/css\/font-awesome-4.7.0\/src\/examples.html": "680fb422b52d80c5503cdae6774f4feb7290a542ae93b294961dd96694f6f72c125b39898e21c00470df65414cf4e3e1ae31cc500097e7c8578fa223aeee33bf",
336
+        "phone\/css\/font-awesome-4.7.0\/src\/get-started.html": "f773d4781b5e4817544fdd144005157be79a773d3b1a8a72e30e98354cb6de28887585d4f64f7ea3a8a8ee8faaf242b77c8d4f1b1319c01bc1ed917da7a537b4",
337
+        "phone\/css\/font-awesome-4.7.0\/src\/icons.html": "77017e98ef938c868ed33d4c7125cbd6e5bb6bf5426fe9dfbc9548d5224ca102f5b6277ec6d9e26db29fbffe973a8aa8e77d494832ff3ee6918c8e2d0384be83",
338
+        "phone\/css\/font-awesome-4.7.0\/src\/icons.yml": "b67111f3a3a99ef19f5f7dcc27ff0ad37a5b7e74e288ead793b50ea319e65f4c24716b1ab412e2e12772408b5c1cebb56884cad02d425104325f39236ea4b3c8",
339
+        "phone\/css\/font-awesome-4.7.0\/src\/index.html": "e3c7f7f120a5f0015a7b63d9f84f71aabd6b669cf19e72be01e15374d357171948935ec8b4824f6aafcae82bd9916ccd8768d1d195fccf0b8f281f17c88ac174",
340
+        "phone\/css\/font-awesome-4.7.0\/src\/license.html": "a73280c350c239e7e0d8dc4f96dd9ec90e695accf6a86e7a6641ea68145e007b761324aad669fcfc9bd4f43781b71563b2900016b4c78797d392db6985cb7de9",
341
+        "phone\/css\/font-awesome-4.7.0\/src\/store.html": "a6de552c4d0099c7a4586a2c27ad1bb016461a35bf3d7ec0647ba93c55146e53dcf51b52daae17330a734279513dbf3e6586983574ed5e28d0707bfdb9a13dc1",
342
+        "phone\/css\/font-awesome-4.7.0\/src\/survey.html": "09b3fb7dd39ff303d463da73133ea78ec9a60aa5f7189929ac0a8aea9fe51c09fae1bb8c2c85772001d4e828a42b7e4c4d57419f488f49b5a9584dc010365a10",
343
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/2.3.2.html": "70f712d192f8441b7e2a5504b84955e42360c56b3c2b00df15472a69a4c435c74baae6876c4e8f9d00572f7bc7f24dd17726604025f89b12ecbfd1710b8325e3",
344
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/all.html": "8056255c377ce11e2a51b001330f29ae81462e4ace4e7e3ff960d4e661cc282eeef4ef168a307a01196a830f2fb8dcf572b39c3cbb5d77e8bde8643f2a64e869",
345
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/glyphicons.html": "b21a79668cf8d1a330ea2148e2f1089d41420f7f0e23b2862ea01e1e3c459d325247339aeee5d6dee5149b4f0f143832b819d07138da87eccbfbe130cd9ff650",
346
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/height\/4.4.0.html": "435d1525deea3bbdddf21794156acfa355e9fae0ecb37a64b3e7486d4e3ea798c2d95ceadb12fc3b3f9b4017530e00eb0e44f1fc9c5865013520855b2b184685",
347
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/height\/4.5.0.html": "f8e27986cc8539878b4247d92ea56a4750d036adabdb0b208d5e2a6c0df1ced6f4a6a9fd4d0f9ed7c0cf695233a16f6bed7ab0981e7bd57423f55dc5b3ae0710",
348
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/height\/current.html": "dc9b48458c1841dd7bd085f7753ccbf27203591f68f0278f0b9df1cdaf9beb043a35d9c7b9bb500a2667543582d4c9b40b5c2f144cf88997d8dc84fedd00ee1b",
349
+        "phone\/css\/font-awesome-4.7.0\/src\/test\/index.html": "8060c06227dd2096d27afbc55f027214974a38c5f711d3f0c77ef1645441302324102037c7ad57b116d60c8aed2d847655bfddbfe0ba526fb0b5966435b509be",
350
+        "phone\/css\/font-awesome-4.7.0\/src\/thanks.html": "cf0b677134a1893d3335991a2a9b9533812447a0817b88c03c6f27c967fe8956cdd17b355b6abe796617d83e0229c945a557345c11580b636b5fd633af273bdb",
351
+        "phone\/css\/font-awesome-4.7.0\/src\/whats-new.html": "56607f43fc358a79bce938d9198bb7b091159d9aed52a354b57027810564973ddb9f0cd36b6ed8e573f6e9f09b25b043cdc88a1c22d212367e7794775a0e44f1",
352
+        "phone\/images\/sip_trip_phone_logo.svg": "271b9632efc181f514892220a648aa2636ec8a561e297c1a2abfb64a10ffcdbff37913bf8cc82ad362a33b4faf224e74b45bd32a9b1b760a2e0476d56bc02538",
353
+        "phone\/images\/sip_trip_phone_logo_large.svg": "b622744c5eff160b77ef7226d8f70eef15311db18d7dea9e334e92b20601a33d812cb0bbc3eef74d6294d1ab43ba3969a7ffde23d8ec2f7f9d1dbf6b6ec18e25",
354
+        "phone\/index.html": "6e507bf3b32cbdf42bdedc348b66cc8df36660dbd94c2255f1e52557424220d18bc67e83315fd4ad765dc2010993048aec196a5a362ab2aa69c59d925cd00e29",
355
+        "phone\/scripts\/SIP.js\/sip.min.js": "ac923b5f101160a076034d6dfb2409fe479a4df6aa4cca358b64ef516de77f0c58b8faeac6a7bb9b7f0ac908e5773b0d567dcb3aa01a1a3bb5d133d41113a1c4",
356
+        "phone\/scripts\/app.js": "38508db724765f7b26af0e8cba5460c089ad4b47c8e4b6fafbd0ccd911b6ab913e5c8f2c49f54f53e8b4b19b889dd8bbd888279853e37322d71e3bf824c124d2",
357
+        "phone\/scripts\/bootstrap.min.js": "de8d6bf69932b479dcfe470e893effa9f88d399314b2fa74c14a1465c7a6f1da78a3764fa35ee05ddd6a3f225588e601ed5978d5ef48e353e279c596f2471071",
358
+        "phone\/scripts\/jquery-1.11.3.min.js": "25e4bc43cc350f38cab68b422101b528781bcd271a299cad39aaf64aa331ed0a35b9dfed3938ddccaa08c31161ee2c472acf297aabea334315758e128487b0fb",
359
+        "phone\/scripts\/moment.min.js": "8f42e847a067c9f4e803bed887cb458ca2a6973025a6bd7f4a0853eeb24b4c64f8284e9d8fd40066fc71e17a90b36d1a6477939ff7c4160dec09e11e6f90d798",
360
+        "phone\/sounds\/dtmf.mp3": "d9b69c59574464893da638a9219aca54458a8beca8f011f7a096c6b9398e06a1caf9b159c8ac6f3b134bf26f6ea7b5d816a853521144ecf5e25f2dbc9df86a3a",
361
+        "phone\/sounds\/incoming.mp3": "afc21597aa7ee11df446d4f0c9a6f08330c7361b6d39dcd4d9d24de7d6b663d2957bebfb7d3e593de3348dbe10c9c7389a15ec002fbdd0bca741a0febe89a250",
362
+        "phone\/sounds\/outgoing.mp3": "2ab5db0920b6bdfa3fcc45cd3ece9d6497d2cb51b128895161deb6fd9964c5705092a9f9f98b945bade8fd43d05d8d07657129a6cad4c469f8b541d112ddbc18",
363
+        "templates\/content\/index.php": "44ea4db27e9af9e1c61a2d6c8431b22d17dbec2e9c732201ac8b81d56ae9d85e37f68cd11f9de2f5936e8de3d240ac5ebd28296f5994411ffd35f01d9a4dcfc1",
364
+        "templates\/index.php": "e1737e2207375f18a5d1b795f9cca76ac2acc20d569452081aa548c2980e3f1d2389afd483e59a29a600dfc766c764550c322c8de9ede58772b9d25f253674bb",
365
+        "templates\/settings.php": "3d14e71c640f2c7c3b81ff688561bb153d28f8989b5158a09fee800cb19ddbc0c32a788b2df75b3f0b149fdc1af9f0853bf81291820a8cb35225814057c80446"
366
+    },
367
+    "signature": "Bfi\/th+74UJwB8Hef1PYOGXBOtsBsMhH2f322AhAE4e6lx7nVIig2SCyOxFt3M\/PidKyqA4TfC0gp5qhTT3goyGvWbNCzmsN7F1Jv6jNyu791t14n0huzhmQwu5wlzCdBfYbHi4SSgEftg1sJoraXJndGrhp+KD0IMeEjbgQ0arBrWsdWxE2Dz8KXGr9WFzhoZReWgTmmnEeFpoLtolIv9P9bPIR+Xqmtqj+qQYXQJ3oPH8KXcLJ4FhXFh6LgZRCtW54MAoyAsrnXBPHhnSF2oiEAOb7VvrwhLPAJQihIJr2mx6+OzAcWac02AXM9r0DrV8bN5brVzGOpZ0oYbyBy1ZeTJkfr71Emx0cwxzFs8NAtUTgWKovNL5Vgw5\/EraqsgvcxNOhQ\/KJghKcg8fDldC+nOHixaOpimmbBQU3fM922LmYaseincNYMXZ\/fymgUo6zv5iB+WNE8GiRBUHn7gnsfZcqJpe42OC3v2DnGAiSejKuYhqGpKo\/oxZgvx\/AtYKLlXMLIEuybGBQB1SKcxW1nK1KJ6ecO1dfQjFu\/W3voF7ZamtZhjnmyfE7NFBhoPRxERPIQjNOaWhg\/OdGwAKqrgiNJ6JhjFSjFM008NZN6S24nP9ORu0vj2oFcnnT4asv+Sh0sVdXzcWWX+MmMtjrXDwoG76oFkkeF3B7+\/s=",
368
+    "certificate": "-----BEGIN CERTIFICATE-----\r\nMIIECTCCAvECAhG7MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMjIwMjI1MTU1NzUxWhcNMzIwNjAyMTU1NzUxWjAZMRcwFQYD\r\nVQQDDA5zaXBfdHJpcF9waG9uZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\r\nggIBALGXGrkLJY9XsqMXKDMLD4+Ub5HVr9HebfC2593+Ed41HVqIca9z3CdeXg87\r\npTjyZQhqsCzVArIJsmnH5pT02NYZDsZeARWpRLYWOIQeOJwS0EdOtWP6\/VXjxfw+\r\nUaDthCcfcj8TC7y+15zqwx9ERSc8ujXadGPqZEZAfGuZSy6b9+oXo17tT9fCbVeJ\r\nYyXibMWutUhIt8FvUQ2PCUYUity1kvn9+G3sOlPYMWDqPG3tt70EJ2m1J9ZX6Pa8\r\npmI8LG8IvFWImbX1\/+8YrtQZ0RQcoP7yX\/H6S8NvsAux\/sgMYNSEVbXzapE2TeMD\r\n1w0aEH3101twV+2cuKf8U+bt0Vha9HFNC06Nmu2lQkXPV\/Cdvx+DIKXhb3AaApgB\r\nT4uzRE4Zfg\/BZkspJ7IFObi2NpTv2T4frH3tZudOR\/OWtsGTpZbH8p12RK7yE19d\r\nMCR3DdVMe\/OXh1GaIc30s4jd6apskC33xZJ3IamyzY6EYLL41E2vmd9Eg6VMTGXJ\r\nHuOdAtJYy4R6040aDXfeNAnTcCVZQYmPvfnalQfcfiQePaWMyMVsBFy\/utq\/R\/qU\r\nTgtp68+jhvRH2YOxUVvuyrWhxY8PqhNHWlp5OYGllBdes5GrKvGIqnO\/q1nC6V5A\r\nHd+1SZSQJE1kQxpXxiDJeYBUQZUyBOiqM+GNfnZi+kVJ75YtAgMBAAEwDQYJKoZI\r\nhvcNAQELBQADggEBAIOJ8yPdp3vsRaOzsQCg8NdQgIDn9PZRtF0GjOPqVCOo\/ytx\r\nwIgdAiTAl1qvQaUjRSZf+qpYFPs\/Ojqd3DHi+ySPcq6PkkTWxkEpRmoaoFNAt0XA\r\nyOjSQhsBxuqFDmK+U6YvB\/QupGOSZipaBjQnaP5xufoiitIdRqd1XFHyBiNEfRt1\r\nQhLzrz\/u4PLaC6653qrl\/Jpd\/tp7LUtglihr4ODkALNQFWgY0n58tawkvTBaOpf2\r\nE3BfgleQKRa73g\/H3pGtUWtdXeTSkNHlxqef7l\/icwEDWqZfV8MIPRgEymG1naYL\r\nFIBUptO7eT+NDScFHKe4rtPK7FHhUjS7x4OcIao=\r\n-----END CERTIFICATE-----"
369
+}
0 370
\ No newline at end of file
1 371
new file mode 100644
... ...
@@ -0,0 +1,73 @@
1
+/**
2
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
+ *
4
+ * @author Double Bastion LLC
5
+ *
6
+ * @license GNU AGPL version 3 or any later version
7
+ *
8
+ * This program is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
+ * License as published by the Free Software Foundation; either
11
+ * version 3 of the License, or any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
+ *
18
+ * You should have received a copy of the GNU Affero General Public
19
+ * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#app-content {
24
+  display: block;
25
+  position: absolute;
26
+  width: 100%;
27
+  height: 100%;
28
+}
29
+
30
+#app-content #app-content-wrapper {
31
+  display: block;
32
+  position: absolute;
33
+  margin: 0px;
34
+  height: 100%;
35
+  width: 100%;
36
+}
37
+
38
+.sip_trip_box {
39
+  width: 400px;
40
+  display: block;
41
+}
42
+
43
+#settings-dscr {
44
+  padding-top: 3px;
45
+}
46
+
47
+#sip_trip_phone_save_msg {
48
+  color: #181918;
49
+  background-color: #a5e5b3;
50
+  font-weight: bold;
51
+}
52
+
53
+#STPhoneContent {
54
+  display: block; 
55
+  position: relative;
56
+  width: 100%;
57
+  height: 100%;
58
+}
59
+
60
+#STPhoneGreyLogo {
61
+  display: block;
62
+  margin-top: -40px;
63
+  position: relative;
64
+  background-image: url('../img/sip_trip_phone_grey.svg');
65
+  background-repeat: no-repeat;
66
+  background-position: center center;
67
+  width: 100%;
68
+  height: 100%;
69
+}
70
+
71
+#labelSipRealm {
72
+  width: 400px;
73
+}
0 74
\ No newline at end of file
1 75
new file mode 100644
... ...
@@ -0,0 +1,937 @@
1
+/**
2
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
3
+ *
4
+ * @author Double Bastion LLC
5
+ *
6
+ * @license GNU AGPL version 3 or any later version
7
+ *
8
+ * This program is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
10
+ * License as published by the Free Software Foundation; either
11
+ * version 3 of the License, or any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
17
+ *
18
+ * You should have received a copy of the GNU Affero General Public
19
+ * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ *
22
+ *
23
+ * This is a modified version of the original file "app.js".
24
+ *
25
+ * We list below the copyright notice of the ctxSip phone (https://github.com/collecttix/ctxSip)
26
+ * which also applies to the original "app.js" file, which was part of it:
27
+ *
28
+ *
29
+ *  The MIT License (MIT)
30
+ *
31
+ *  Copyright (c) 2014 Collecttix
32
+ *
33
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy
34
+ *  of this software and associated documentation files (the "Software"), to deal
35
+ *  in the Software without restriction, including without limitation the rights
36
+ *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+ *  copies of the Software, and to permit persons to whom the Software is
38
+ *  furnished to do so, subject to the following conditions:
39
+ *
40
+ *  The above copyright notice and this permission notice shall be included in
41
+ *  all copies or substantial portions of the Software.
42
+ *
43
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+ *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
49
+ *  THE SOFTWARE.
50
+ *
51
+ */
52
+
53
+
54
+/* globals SIP, user, moment, Stopwatch */
55
+
56
+$(document).ready(function() {
57
+
58
+    var ctxSip;
59
+
60
+    // Show system notifications on incoming calls
61
+    function incomingCallNote() {
62
+       var noticeOptions = { body: "New incoming call !!!", icon: "images/sip_trip_phone_logo.svg" }
63
+       var inComingCallNotification = new Notification("SIP Trip Phone incoming call", noticeOptions);
64
+       inComingCallNotification.onclick = function (event) {
65
+         return;
66
+       }
67
+
68
+       if (document.hasFocus()) {
69
+           return;
70
+       } else { setTimeout(incomingCallNote, 8000); }
71
+    }
72
+
73
+    // Change page title on incoming calls
74
+    function changePageTitle() {
75
+        if ($(document).attr("title") == "SIP Trip Phone") { $(document).prop("title", "New call !!!"); } else { $(document).prop("title", "SIP Trip Phone"); }
76
+        if (document.hasFocus()) {
77
+            $(document).prop("title", "SIP Trip Phone");
78
+            return;
79
+        } else { setTimeout(changePageTitle, 460); }
80
+    }
81
+
82
+    var userSIPPass = window.opener.sipUserPasswd;
83
+
84
+    var user = JSON.parse(localStorage.getItem('SIPCreds'));
85
+
86
+    if (user.Stun != '') {
87
+        var configComp = {
88
+               password        : userSIPPass,
89
+               displayName     : user.Display,
90
+               uri             : 'sip:'+user.User+'@'+user.Realm,
91
+               wsServers       : user.WSServer,
92
+               registerExpires : 9999999,
93
+               traceSip        : true,
94
+               stunServers: ["stun:" + user.Stun],
95
+               log             : {
96
+                   level : 0,
97
+               }
98
+            };
99
+    } else {
100
+        var configComp = {
101
+               password        : userSIPPass,
102
+               displayName     : user.Display,
103
+               uri             : 'sip:'+user.User+'@'+user.Realm,
104
+               wsServers       : user.WSServer,
105
+               registerExpires : 9999999,
106
+               traceSip        : true,
107
+               log             : {
108
+                   level : 0,
109
+               }
110
+            };
111
+    }
112
+
113
+    ctxSip = {
114
+
115
+        config : configComp,
116
+        ringtone     : document.getElementById('ringtone'),
117
+        ringbacktone : document.getElementById('ringbacktone'),
118
+        dtmfTone     : document.getElementById('dtmfTone'),
119
+
120
+        Sessions     : [],
121
+        callTimers   : {},
122
+        callActiveID : null,
123
+        callVolume   : 1,
124
+        Stream       : null,
125
+
126
+        /**
127
+         * Parses a SIP uri and returns a formatted phone number.
128
+         *
129
+         * @param  {string} phone number or uri to format
130
+         * @return {string}       formatted number
131
+         */
132
+        formatPhone : function(phone) {
133
+
134
+            var num;
135
+
136
+            if (phone.indexOf('@')) {
137
+                num =  phone.split('@')[0];
138
+            } else {
139
+                num = phone;
140
+            }
141
+
142
+            num = num.toString().replace(/[^0-9]/g, '');
143
+
144
+            if (num.length === 10) {
145
+                return '(' + num.substr(0, 3) + ') ' + num.substr(3, 3) + '-' + num.substr(6,4);
146
+            } else if (num.length === 11) {
147
+                return '(' + num.substr(1, 3) + ') ' + num.substr(4, 3) + '-' + num.substr(7,4);
148
+            } else {
149
+                return num;
150
+            }
151
+        },
152
+
153
+        // Sound methods
154
+        startRingTone : function() {
155
+            try { ctxSip.ringtone.play(); } catch (e) { }
156
+        },
157
+
158
+        stopRingTone : function() {
159
+            try { ctxSip.ringtone.pause(); } catch (e) { }
160
+        },
161
+
162
+        startRingbackTone : function() {
163
+            try { ctxSip.ringbacktone.play(); } catch (e) { }
164
+        },
165
+
166
+        stopRingbackTone : function() {
167
+            try { ctxSip.ringbacktone.pause(); } catch (e) { }
168
+        },
169
+
170
+        // Genereates a rendom string to ID a call
171
+        getUniqueID : function() {
172
+            return Math.random().toString(36).substr(2, 9);
173
+        },
174
+
175
+
176
+        newSession : function(newSess) {
177
+
178
+            newSess.displayName = newSess.remoteIdentity.displayName || newSess.remoteIdentity.uri.user;
179
+            newSess.ctxid       = ctxSip.getUniqueID();
180
+
181
+            var status;
182
+
183
+            if (newSess.direction === 'incoming') {
184
+                status = "Incoming: "+ newSess.displayName;
185
+                ctxSip.startRingTone();
186
+
187
+                incomingCallNote();
188
+                changePageTitle();
189
+
190
+            } else {
191
+                status = "Trying: "+ newSess.displayName;
192
+                ctxSip.startRingbackTone();
193
+            }
194
+
195
+            ctxSip.logCall(newSess, 'ringing');
196
+
197
+            ctxSip.setCallSessionStatus(status);
198
+
199
+            // EVENT CALLBACKS
200
+
201
+            newSess.on('progress',function(e) {
202
+                if (e.direction === 'outgoing') {
203
+                    ctxSip.setCallSessionStatus('Calling...');
204
+                }
205
+            });
206
+
207
+            newSess.on('connecting',function(e) {
208
+                if (e.direction === 'outgoing') {
209
+                    ctxSip.setCallSessionStatus('Connecting...');
210
+                }
211
+            });
212
+
213
+
214
+           newSess.on('accepted',function(e) {
215
+
216
+             // If there is another active call, hold it
217
+             if (ctxSip.callActiveID && ctxSip.callActiveID !== newSess.ctxid) {
218
+                 ctxSip.phoneHoldButtonPressed(ctxSip.callActiveID);
219
+             }
220
+
221
+             ctxSip.stopRingbackTone();
222
+             ctxSip.stopRingTone();
223
+             ctxSip.setCallSessionStatus('Answered');
224
+             ctxSip.logCall(newSess, 'answered');
225
+             ctxSip.callActiveID = newSess.ctxid;
226
+           });
227
+
228
+            newSess.on('hold', function(e) {
229
+                ctxSip.callActiveID = null;
230
+                ctxSip.logCall(newSess, 'holding');
231
+            });
232
+
233
+            newSess.on('unhold', function(e) {
234
+                ctxSip.logCall(newSess, 'resumed');
235
+                ctxSip.callActiveID = newSess.ctxid;
236
+            });
237
+
238
+            newSess.on('muted', function(e) {
239
+                ctxSip.Sessions[newSess.ctxid].isMuted = true;
240
+                ctxSip.setCallSessionStatus("Muted");
241
+            });
242
+
243
+            newSess.on('unmuted', function(e) {
244
+                ctxSip.Sessions[newSess.ctxid].isMuted = false;
245
+                ctxSip.setCallSessionStatus("Answered");
246
+            });
247
+
248
+            newSess.on('cancel', function(e) {
249
+                ctxSip.stopRingTone();
250
+                ctxSip.stopRingbackTone();
251
+                ctxSip.setCallSessionStatus("Canceled");
252
+                if (this.direction === 'outgoing') {
253
+                    ctxSip.callActiveID = null;
254
+                    newSess             = null;
255
+                    ctxSip.logCall(this, 'ended');
256
+                }
257
+            });
258
+
259
+            newSess.on('bye', function(e) {
260
+                ctxSip.stopRingTone();
261
+                ctxSip.stopRingbackTone();
262
+                ctxSip.setCallSessionStatus("");
263
+                ctxSip.logCall(newSess, 'ended');
264
+                ctxSip.callActiveID = null;
265
+                newSess             = null;
266
+            });
267
+
268
+            newSess.on('failed',function(e) {
269
+                ctxSip.stopRingTone();
270
+                ctxSip.stopRingbackTone();
271
+                ctxSip.setCallSessionStatus('Terminated');
272
+            });
273
+
274
+            newSess.on('rejected',function(e) {
275
+                ctxSip.stopRingTone();
276
+                ctxSip.stopRingbackTone();
277
+                ctxSip.setCallSessionStatus('Rejected');
278
+                ctxSip.callActiveID = null;
279
+                ctxSip.logCall(this, 'ended');
280
+                newSess             = null;
281
+            });
282
+
283
+            ctxSip.Sessions[newSess.ctxid] = newSess;
284
+
285
+        },
286
+
287
+        // getUser media request refused or device was not present
288
+        getUserMediaFailure : function(e) {
289
+            window.console.error('getUserMedia failed:', e);
290
+            ctxSip.setError(true, 'Media Error.', 'You must allow access to your microphone.  Check the address bar.', true);
291
+        },
292
+
293
+
294
+        getUserMediaSuccess : function(stream) {
295
+            ctxSip.Stream = stream;
296
+        },
297
+
298
+
299
+        /**
300
+         * sets the ui call status field
301
+         *
302
+         * @param {string} status
303
+         */
304
+        setCallSessionStatus : function(status) {
305
+            $('#txtCallStatus').html(status);
306
+        },
307
+
308
+        /**
309
+         * sets the ui connection status field
310
+         *
311
+         * @param {string} status
312
+         */
313
+        setStatus : function(status) {
314
+            $("#txtRegStatus").html('<i class="fa fa-signal"></i> '+status);
315
+        },
316
+
317
+        /**
318
+         * logs a call to localstorage
319
+         *
320
+         * @param  {object} session
321
+         * @param  {string} status Enum 'ringing', 'answered', 'ended', 'holding', 'resumed'
322
+         */
323
+        logCall : function(session, status) {
324
+
325
+            var log = {
326
+                    clid : session.displayName,
327
+                    uri  : session.remoteIdentity.uri.toString(),
328
+                    id   : session.ctxid,
329
+                    time : new Date().getTime()
330
+                },
331
+                calllog = JSON.parse(localStorage.getItem('sipCalls'));
332
+
333
+            if (!calllog) { calllog = {}; }
334
+
335
+            if (!calllog.hasOwnProperty(session.ctxid)) {
336
+                calllog[log.id] = {
337
+                    id    : log.id,
338
+                    clid  : log.clid,
339
+                    uri   : log.uri,
340
+                    start : log.time,
341
+                    flow  : session.direction
342
+                };
343
+            }
344
+
345
+            if (status === 'ended') {
346
+                calllog[log.id].stop = log.time;
347
+            }
348
+
349
+            if (status === 'ended' && calllog[log.id].status === 'ringing') {
350
+                calllog[log.id].status = 'missed';
351
+            } else {
352
+                calllog[log.id].status = status;
353
+            }
354
+
355
+            localStorage.setItem('sipCalls', JSON.stringify(calllog));
356
+            ctxSip.logShow();
357
+        },
358
+
359
+        /**
360
+         * adds a ui item to the call log
361
+         *
362
+         * @param  {object} item log item
363
+         */
364
+        logItem : function(item) {
365
+
366
+            var callActive = (item.status !== 'ended' && item.status !== 'missed'),
367
+                callLength = (item.status !== 'ended')? '<span id="'+item.id+'"></span>': moment.duration(item.stop - item.start).humanize(),
368
+                callClass  = '',
369
+                callIcon,
370
+                i;
371
+
372
+            switch (item.status) {
373
+                case 'ringing'  :
374
+                    callClass = 'list-group-item-success';
375
+                    callIcon  = 'fa-bell';
376
+                    break;
377
+
378
+                case 'missed'   :
379
+                    callClass = 'list-group-item-danger';
380
+                    if (item.flow === "incoming") { callIcon = 'fa-chevron-left'; }
381
+                    if (item.flow === "outgoing") { callIcon = 'fa-chevron-right'; }
382
+                    break;
383
+
384
+                case 'holding'  :
385
+                    callClass = 'list-group-item-warning';
386
+                    callIcon  = 'fa-pause';
387
+                    break;
388
+
389
+                case 'answered' :
390
+                case 'resumed'  :
391
+                    callClass = 'list-group-item-info';
392
+                    callIcon  = 'fa-phone-square';
393
+                    break;
394
+
395
+                case 'ended'  :
396
+                    if (item.flow === "incoming") { callIcon = 'fa-chevron-left'; }
397
+                    if (item.flow === "outgoing") { callIcon = 'fa-chevron-right'; }
398
+                    break;
399
+            }
400
+
401
+
402
+            i  = '<div class="list-group-item sip-logitem clearfix '+callClass+'" data-uri="'+item.uri+'" data-sessionid="'+item.id+'" title="Double Click to Call">';
403
+            i += '<div class="clearfix"><div class="pull-left">';
404
+            i += '<i class="fa fa-fw '+callIcon+' fa-fw"></i> <strong>'+ctxSip.formatPhone(item.uri)+'</strong><br><small>'+moment(item.start).format('MM/DD hh:mm:ss a')+'</small>';
405
+            i += '</div>';
406
+            i += '<div class="pull-right text-right"><em>'+item.clid+'</em><br>' + callLength+'</div></div>';
407
+
408
+            if (callActive) {
409
+                i += '<div class="btn-group btn-group-xs pull-right">';
410
+                if (item.status === 'ringing' && item.flow === 'incoming') {
411
+                    i += '<button class="btn btn-xs btn-success btnCall" title="Call"><i class="fa fa-phone"></i></button>';
412
+                } else {
413
+                    i += '<button class="btn btn-xs btn-primary btnHoldResume" title="Hold"><i class="fa fa-pause"></i></button>';
414
+                    i += '<button class="btn btn-xs btn-info btnTransfer" title="Transfer"><i class="fa fa-random"></i></button>';
415
+                    i += '<button class="btn btn-xs btn-warning btnMute" title="Mute"><i class="fa fa-fw fa-microphone"></i></button>';
416
+                }
417
+                i += '<button class="btn btn-xs btn-danger btnHangUp" title="Hangup"><i class="fa fa-stop"></i></button>';
418
+                i += '</div>';
419
+            }
420
+            i += '</div>';
421
+
422
+            $('#sip-logitems').append(i);
423
+
424
+
425
+            // Start call timer on answer
426
+            if (item.status === 'answered') {
427
+                var tEle = document.getElementById(item.id);
428
+                ctxSip.callTimers[item.id] = new Stopwatch(tEle);
429
+                ctxSip.callTimers[item.id].start();
430
+            }
431
+
432
+            if (callActive && item.status !== 'ringing') {
433
+                ctxSip.callTimers[item.id].start({startTime : item.start});
434
+            }
435
+
436
+            $('#sip-logitems').scrollTop(0);
437
+        },
438
+
439
+        /**
440
+         * updates the call log ui
441
+         */
442
+        logShow : function() {
443
+
444
+            var calllog = JSON.parse(localStorage.getItem('sipCalls')),
445
+            x = [];
446
+
447
+            if (calllog !== null) {
448
+
449
+                $('#sip-splash').addClass('hide');
450
+                $('#sip-log').removeClass('hide');
451
+
452
+                // empty existing logs
453
+                $('#sip-logitems').empty();
454
+
455
+                // JS doesn't guarantee property order so
456
+                // create an array with the start time as
457
+                // the key and sort by that.
458
+
459
+                // Add start time to array
460
+                $.each(calllog, function(k,v) {
461
+                    x.push(v);
462
+                });
463
+
464
+                // sort descending
465
+                x.sort(function(a, b) {
466
+                    return b.start - a.start;
467
+                });
468
+
469
+                $.each(x, function(k, v) {
470
+                    ctxSip.logItem(v);
471
+                });
472
+
473
+            } else {
474
+                $('#sip-splash').removeClass('hide');
475
+                $('#sip-log').addClass('hide');
476
+            }
477
+        },
478
+
479
+        /**
480
+         * removes log items from localstorage and updates the UI
481
+         */
482
+        logClear : function() {
483
+
484
+            localStorage.removeItem('sipCalls');
485
+            ctxSip.logShow();
486
+        },
487
+
488
+        sipCall : function(target) {
489
+
490
+            try {
491
+                var s = ctxSip.phone.invite(target, {
492
+                    media : {
493
+                        stream      : ctxSip.Stream,
494
+                        constraints : { audio : true, video : false },
495
+                        render      : { remote: document.getElementById('audioRemote') }
496
+                        // render: { remote: $('#audioRemote').get()[0] }
497
+                        // RTCConstraints : { "optional": [{ 'DtlsSrtpKeyAgreement': 'true'} ]}
498
+                    }
499
+                });
500
+                s.direction = 'outgoing';
501
+                ctxSip.newSession(s);
502
+
503
+            } catch(e) {
504
+                throw(e);
505
+            }
506
+        },
507
+
508
+        sipTransfer : function(sessionid) {
509
+
510
+                var s  = ctxSip.Sessions[sessionid],
511
+                target = window.prompt('Enter destination number', '');
512
+
513
+            ctxSip.setCallSessionStatus('<i>Transfering the call...</i>');
514
+            s.refer(target);
515
+        },
516
+
517
+        sipHangUp : function(sessionid) {
518
+
519
+            var s = ctxSip.Sessions[sessionid];
520
+            // s.terminate();
521
+            if (!s) {
522
+                return;
523
+            } else if (s.startTime) {
524
+                s.bye();
525
+            } else if (s.reject) {
526
+                s.reject();
527
+            } else if (s.cancel) {
528
+                s.cancel();
529
+            }
530
+
531
+        },
532
+
533
+        sipSendDTMF : function(digit) {
534
+
535
+            try { ctxSip.dtmfTone.play(); } catch(e) { }
536
+
537
+            var a = ctxSip.callActiveID;
538
+            if (a) {
539
+                var s = ctxSip.Sessions[a];
540
+                s.dtmf(digit);
541
+            }
542
+        },
543
+
544
+        phoneCallButtonPressed : function(sessionid) {
545
+
546
+                var s  = ctxSip.Sessions[sessionid],
547
+                target = $("#numDisplay").val();
548
+
549
+            if (!s) {
550
+
551
+                $("#numDisplay").val("");
552
+                ctxSip.sipCall(target);
553
+
554
+            } else if (s.accept && !s.startTime) {
555
+
556
+                s.accept({
557
+                    media: {
558
+                            stream: ctxSip.Stream,
559
+                            constraints: { audio: true, video: false },
560
+                            render      : { remote: document.getElementById('audioRemote') }
561
+                            // render: { remote: $('#audioRemote').get()[0] }
562
+                            // RTCConstraints : { "optional": [{ 'DtlsSrtpKeyAgreement': 'true'} ]}
563
+                           }
564
+                });
565
+            }
566
+        },
567
+
568
+        phoneMuteButtonPressed : function (sessionid) {
569
+
570
+            var s = ctxSip.Sessions[sessionid];
571
+
572
+            if (!s.isMuted) {
573
+                s.mute();
574
+            } else {
575
+                s.unmute();
576
+            }
577
+        },
578
+
579
+        phoneHoldButtonPressed : function(sessionid) {
580
+
581
+            var s = ctxSip.Sessions[sessionid];
582
+
583
+            if (s.isOnHold().local === true) {
584
+                s.unhold();
585
+            } else {
586
+                s.hold();
587
+            }
588
+        },
589
+
590
+
591
+        setError : function(err, title, msg, closable) {
592
+
593
+            // Show modal if err = true
594
+            if (err === true) {
595
+                $("#mdlError p").html(msg);
596
+                $("#mdlError").modal('show');
597
+
598
+                if (closable) {
599
+                    var b = '<button type="button" class="close" data-dismiss="modal">&times;</button>';
600
+                    $("#mdlError .modal-header").find('button').remove();
601
+                    $("#mdlError .modal-header").prepend(b);
602
+                    $("#mdlError .modal-title").html(title);
603
+                    $("#mdlError").modal({ keyboard : true });
604
+                } else {
605
+                    $("#mdlError .modal-header").find('button').remove();
606
+                    $("#mdlError .modal-title").html(title);
607
+                    $("#mdlError").modal({ keyboard : false });
608
+                }
609
+                $('#numDisplay').prop('disabled', 'disabled');
610
+            } else {
611
+                $('#numDisplay').removeProp('disabled');
612
+                $("#mdlError").modal('hide');
613
+            }
614
+        },
615
+
616
+        /**
617
+         * Tests for a capable browser, return bool, and shows an
618
+         * error modal on fail.
619
+         */
620
+        hasWebRTC : function() {
621
+
622
+            if (navigator.webkitGetUserMedia) {
623
+                return true;
624
+            } else if (navigator.mozGetUserMedia) {
625
+                return true;
626
+            } else if (navigator.getUserMedia) {
627
+                return true;
628
+            } else {
629
+                ctxSip.setError(true, 'Unsupported Browser.', 'Your browser does not support the features required for this phone.');
630
+                window.console.error("WebRTC support not found");
631
+                return false;
632
+            }
633
+        }
634
+    };
635
+
636
+    userSIPPass = '';
637
+    window.opener.sipUserPasswd = '';
638
+
639
+    // Throw an error if the browser can't hack it.
640
+    if (!ctxSip.hasWebRTC()) {
641
+        return true;
642
+    }
643
+
644
+    ctxSip.phone = new SIP.UA(ctxSip.config);
645
+
646
+    ctxSip.phone.on('connected', function(e) {
647
+        ctxSip.setStatus("Connected");
648
+    });
649
+
650
+    ctxSip.phone.on('disconnected', function(e) {
651
+        ctxSip.setStatus("Disconnected");
652
+
653
+        // disable phone
654
+        ctxSip.setError(true, 'Websocket Disconnected.', 'An Error occurred connecting to the websocket.');
655
+
656
+        // remove existing sessions
657
+        $("#sessions > .session").each(function(i, session) {
658
+            ctxSip.removeSession(session, 500);
659
+        });
660
+    });
661
+
662
+    ctxSip.phone.on('registered', function(e) {
663
+
664
+        var closeEditorWarning = function() {
665
+            return 'If you close this window, you will not be able to make or receive calls from your browser.';
666
+        };
667
+
668
+        var closePhone = function() {
669
+            // stop the phone on unload
670
+            localStorage.removeItem('SipTripPhone');
671
+            ctxSip.phone.stop();
672
+        };
673
+
674
+        window.onbeforeunload = closeEditorWarning;
675
+        window.onunload       = closePhone;
676
+
677
+        // This key is set to prevent multiple windows.
678
+        localStorage.setItem('SipTripPhone', 'true');
679
+
680
+        $("#mldError").modal('hide');
681
+        ctxSip.setStatus("Ready");
682
+
683
+        // Get the userMedia and cache the stream
684
+        var audio = document.getElementById('audioRemote');
685
+        var mediaStream = new MediaStream();
686
+        let audioTrack = null;
687
+
688
+        navigator.mediaDevices.getUserMedia({ audio : true, video : false }, ctxSip.getUserMediaSuccess, ctxSip.getUserMediaFailure).then(function(mediaStream) {
689
+
690
+           let audioTracks = mediaStream.getAudioTracks();
691
+           audio.srcObject = mediaStream;
692
+
693
+           if (audioTracks.length) {
694
+               audioTrack = audioTracks[0];
695
+           }
696
+        }).then(function() {
697
+           new Promise(function(resolve) {
698
+               audio.onloadedmetadata = resolve;
699
+           })
700
+        })
701
+
702
+    });
703
+
704
+    ctxSip.phone.on('registrationFailed', function(e) {
705
+        ctxSip.setError(true, 'Registration Error.', 'An Error occurred registering your phone. Check your settings.');
706
+        ctxSip.setStatus("Error: Registration Failed");
707
+    });
708
+
709
+    ctxSip.phone.on('unregistered', function(e) {
710
+        ctxSip.setError(true, 'Registration Error.', 'An Error occurred registering your phone. Check your settings.');
711
+        ctxSip.setStatus("Error: Registration Failed");
712
+    });
713
+
714
+    ctxSip.phone.on('invite', function (incomingSession) {
715
+
716
+        var s = incomingSession;
717
+
718
+        s.direction = 'incoming';
719
+        ctxSip.newSession(s);
720
+    });
721
+
722
+    // Auto-focus number input on backspace.
723
+    $('#sipClient').keydown(function(event) {
724
+        if (event.which === 8) {
725
+            $('#numDisplay').focus();
726
+        }
727
+    });
728
+
729
+    $('#numDisplay').keypress(function(e) {
730
+        // Enter pressed? so Dial.
731
+        if (e.which === 13) {
732
+            ctxSip.phoneCallButtonPressed();
733
+        }
734
+    });
735
+
736
+    var clck = 0;
737
+
738
+    $('.digit').click(function(event) {
739
+
740
+     if (event.shiftKey) {
741
+
742
+         clck++;
743
+         event.preventDefault();
744
+         var num = $('#numDisplay').val();
745
+         var dig;
746
+         var diginit = $(this).data('digit').toString().split(',');
747
+         var elct = diginit.length;
748
+
749
+         dig = diginit[clck%elct];
750
+         var numsec = num.slice(0,-1);
751
+         $('#numDisplay').val(numsec+dig);
752
+         ctxSip.sipSendDTMF(dig);
753
+
754
+     } else {
755
+         event.preventDefault();
756
+         var num = $('#numDisplay').val();
757
+         var dig;
758
+         var diginit = $(this).data('digit').toString().split(',');
759
+
760
+         dig = diginit[0];
761
+         clck = 0;
762
+         $('#numDisplay').val(num+dig);
763
+         ctxSip.sipSendDTMF(dig);
764
+       }
765
+
766
+       return false;
767
+
768
+    });
769
+
770
+    $('#phoneUI .dropdown-menu').click(function(e) {
771
+        e.preventDefault();
772
+    });
773
+
774
+    $('#phoneUI').delegate('.btnCall', 'click', function(event) {
775
+        ctxSip.phoneCallButtonPressed();
776
+        // to close the dropdown
777
+        return true;
778
+    });
779
+
780
+    $('.sipLogClear').click(function(event) {
781
+        event.preventDefault();
782
+        ctxSip.logClear();
783
+    });
784
+
785
+    $('#sip-logitems').delegate('.sip-logitem .btnCall', 'click', function(event) {
786
+        var sessionid = $(this).closest('.sip-logitem').data('sessionid');
787
+        ctxSip.phoneCallButtonPressed(sessionid);
788
+        return false;
789
+    });
790
+
791
+    $('#sip-logitems').delegate('.sip-logitem .btnHoldResume', 'click', function(event) {
792
+        var sessionid = $(this).closest('.sip-logitem').data('sessionid');
793
+        ctxSip.phoneHoldButtonPressed(sessionid);
794
+        return false;
795
+    });
796
+
797
+    $('#sip-logitems').delegate('.sip-logitem .btnHangUp', 'click', function(event) {
798
+        var sessionid = $(this).closest('.sip-logitem').data('sessionid');
799
+        ctxSip.sipHangUp(sessionid);
800
+        return false;
801
+    });
802
+
803
+    $('#sip-logitems').delegate('.sip-logitem .btnTransfer', 'click', function(event) {
804
+        var sessionid = $(this).closest('.sip-logitem').data('sessionid');
805
+        ctxSip.sipTransfer(sessionid);
806
+        return false;
807
+    });
808
+
809
+    $('#sip-logitems').delegate('.sip-logitem .btnMute', 'click', function(event) {
810
+        var sessionid = $(this).closest('.sip-logitem').data('sessionid');
811
+        ctxSip.phoneMuteButtonPressed(sessionid);
812
+        return false;
813
+    });
814
+
815
+    $('#sip-logitems').delegate('.sip-logitem', 'dblclick', function(event) {
816
+        event.preventDefault();
817
+
818
+        var uri = $(this).data('uri');
819
+        $('#numDisplay').val(uri);
820
+        ctxSip.phoneCallButtonPressed();
821
+    });
822
+
823
+    $('#sldVolume').on('change', function() {
824
+
825
+            var v  = $(this).val() / 100,
826
+            btn    = $('#btnVol'),
827
+            icon   = $('#btnVol').find('i'),
828
+            active = ctxSip.callActiveID;
829
+
830
+        // Set the object and media stream volumes
831
+        if (ctxSip.Sessions[active]) {
832
+            ctxSip.Sessions[active].player.volume = v;
833
+            ctxSip.callVolume                     = v;
834
+        }
835
+
836
+        // Set the others
837
+        $('audio').each(function() {
838
+            $(this).get()[0].volume = v;
839
+        });
840
+
841
+        if (v < 0.1) {
842
+            btn.removeClass(function (index, css) {
843
+                   return (css.match (/(^|\s)btn\S+/g) || []).join(' ');
844
+                })
845
+                .addClass('btn btn-sm btn-danger');
846
+            icon.removeClass().addClass('fa fa-fw fa-volume-off');
847
+        } else if (v < 0.8) {
848
+            btn.removeClass(function (index, css) {
849
+                   return (css.match (/(^|\s)btn\S+/g) || []).join(' ');
850
+               }).addClass('btn btn-sm btn-info');
851
+            icon.removeClass().addClass('fa fa-fw fa-volume-down');
852
+        } else {
853
+            btn.removeClass(function (index, css) {
854
+                   return (css.match (/(^|\s)btn\S+/g) || []).join(' ');
855
+               }).addClass('btn btn-sm btn-primary');
856
+            icon.removeClass().addClass('fa fa-fw fa-volume-up');
857
+        }
858
+        return false;
859
+    });
860
+
861
+    // Hide the spalsh after 3 secs.
862
+    setTimeout(function() {
863
+        ctxSip.logShow();
864
+    }, 3000);
865
+
866
+
867
+    /**
868
+     * Stopwatch object used for call timers
869
+     *
870
+     * @param {dom element} elem
871
+     * @param {[object]} options
872
+     */
873
+    var Stopwatch = function(elem, options) {
874
+
875
+        // private functions
876
+        function createTimer() {
877
+            return document.createElement("span");
878
+        }
879
+
880
+        var timer = createTimer(),
881
+            offset,
882
+            clock,
883
+            interval;
884
+
885
+        // default options
886
+        options           = options || {};
887
+        options.delay     = options.delay || 1000;
888
+        options.startTime = options.startTime || Date.now();
889
+
890
+        // append elements
891
+        elem.appendChild(timer);
892
+
893
+        function start() {
894
+            if (!interval) {
895
+                offset   = options.startTime;
896
+                interval = setInterval(update, options.delay);
897
+            }
898
+        }
899
+
900
+        function stop() {
901
+            if (interval) {
902
+                clearInterval(interval);
903
+                interval = null;
904
+            }
905
+        }
906
+
907
+        function reset() {
908
+            clock = 0;
909
+            render();
910
+        }
911
+
912
+        function update() {
913
+            clock += delta();
914
+            render();
915
+        }
916
+
917
+        function render() {
918
+            timer.innerHTML = moment(clock).format('mm:ss');
919
+        }
920
+
921
+        function delta() {
922
+            var now = Date.now(),
923
+                d   = now - offset;
924
+
925
+            offset = now;
926
+            return d;
927
+        }
928
+
929
+        // initialize
930
+        reset();
931
+
932
+        // public API
933
+        this.start = start; //function() { start; }
934
+        this.stop  = stop; //function() { stop; }
935
+    };
936
+
937
+});
0 938
new file mode 100644
... ...
@@ -0,0 +1,75 @@
1
+<?php
2
+/**
3
+ * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
4
+ *
5
+ * @author Double Bastion LLC
6
+ *
7
+ * @license GNU AGPL version 3 or any later version
8
+ *
9
+ * This program is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
+ * License as published by the Free Software Foundation; either
12
+ * version 3 of the License, or any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
+ *
19
+ * You should have received a copy of the GNU Affero General Public
20
+ * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
+ *
22
+ */
23
+
24
+declare(strict_types=1);
25
+
26
+style('sip_trip_phone', 'style');
27
+script('sip_trip_phone', 'settings');
28
+
29
+?>
30
+
31
+<div id="sip_trip_phone_adm">
32
+	<div class="section">
33
+           <h2><?php p($l->t('SIP Trip Phone'));?></h2>
34
+	   <p id="settings-dscr"><h3><?php p($l->t('Enter your credentials in the fields from below:')); ?></h3></p><br>
35
+
36
+           <div class="stp_followupsection">
37
+
38
+                <form id="asterisk_credentials" action="#" >
39
+
40
+                   <p><label for="pdisplayname"><b><?php p($l->t('Display Name: *'));?></b></label></p>
41
+                   <input type="text" class="sip_trip_box" id="pdisplayname" name="pdisplayname" autocomplete="false"
42
+                          placeholder="<?php p($l->t('E.g.: Ben Dove')); ?>" /><br>
43
+
44
+                   <p><label for="sipusername"><b><?php p($l->t('SIP User: *'));?></b></label></p>
45
+                   <input type="text" class="sip_trip_box" id="sipusername" name="sipusername" autocomplete="false"
46
+                          placeholder="<?php p($l->t('E.g.: 1610  or john_doe')); ?>" /><br>
47
+
48
+                   <p><label for="sipuserpassword"><b><?php p($l->t('SIP User Password: *'));?></b></label></p>
49
+                   <input type="password" class="sip_trip_box" id="sipuserpassword" name="sipuserpassword" autocomplete="false"
50
+                          placeholder="<?php p($l->t('E.g.: r?2V!s5w9Q&d7W?8')); ?>" /><br>
51
+
52
+                   <p><label for="stphwssurl"><b><?php p($l->t('WSS URL: *'));?></b></label></p>
53
+                   <input type="text" class="sip_trip_box" id="stphwssurl" name="stphwssurl" autocomplete="false"
54
+                          placeholder="<?php p($l->t('E.g.: wss://cloud.example.com:8089/ws')); ?>" /><br>
55
+
56
+                   <p id="labelSipRealm"><label for="siprealm"><b><?php p($l->t('SIP Realm  (the IPv4 address of your Asterisk server or the domain of the WSS URL offered by the SIP provider): *'));?></b></label></p>
57
+                   <input type="text" class="sip_trip_box" id="siprealm" name="siprealm" autocomplete="false"
58
+                          placeholder="<?php p($l->t('E.g.: 123.123.123.123 or sip.example.com')); ?>" /><br>
59
+
60
+                   <p><label for="stunserver"><b><?php p($l->t('STUN Server domain or IPv4 address, followed by port number:'));?></b></label></p>
61
+                   <input type="text" class="sip_trip_box" id="stunserver" name="stunserver" autocomplete="false"
62
+                          placeholder="<?php p($l->t('E.g.: 123.123.123.123:8443')); ?>" />
63
+
64
+                   <input type="hidden" id="user_id" name="user_id" />
65
+
66
+                   <br>* Required field.<br><br>
67
+
68
+                   <input id="save_sipph_settings" type="submit" value="<?php p($l->t('Save')) ?>" />
69
+
70
+                   <span id="sip_trip_phone_save_msg"></span>
71
+
72
+               </form>
73
+           </div>
74
+        </div>
75
+</div>